使用一个提交按钮提交多个表单,该按钮还传递post数据


Submitting multiple forms with one submit button that also passes post data

我正在构建一个具有多个表单的工具。每个选项卡一个表单,这也允许您创建新的选项卡,从而创建新的表单。

我创建每个标签的方式是这样的

    <div class="tabs_item">
        <h4>Tab01</h4>
        <?php $globalIncrement++; include 'qBox.php';  ?>
    </div> 

qBox.php是一个完全独立的表单,其id和类根据$globalIncrement递增。(我这样做的原因有些无关)。

当用户点击"提交"按钮时,表单接收所有POST数据,然后我们创建results.php页面。

问题是,当您提交时,它只接受来自活动选项卡的POST数据,而不接受来自其他选项卡的POST数据(同样,这些选项卡包含不同的表单)。

我试着用下面的代码来纠正这个问题:

$('#subBtn').click(function(){
$('form').each(function(){
    $(this).submit();
});
});

然而,这只是部分工作。表单操作仍在执行,因此转到results.php。但是,现在没有任何 POST数据被检索。

我如何提交所有这些表单,同时也通过POST数据传递到下一页?

提前感谢!

编辑:

自己解决的。我没有在每个选项卡上都有一个表单,而是简单地将每个选项卡项包装在一个包罗万象的表单中。伟大的工作。

谢谢大家的回答。

使用jQuery,您可以创建一个包含所有输入的表单。像这样:

$('#subBtn').click(function(){
    $('<form>', {
        //All your attributes
        action : 'url',
        method : 'POST'
    })
    .append($('form').children().clone(true, true))[0].submit();
});

假设你有两个表单:#form1, #form2和主表单#form0,并带有提交按钮:

$('#form0').on('submit', function(event) {
    event.preventDefault();
    var xhr1 = $('#form1').ajaxSubmit().data('jqxhr');
    var xhr2 = $('#form2').ajaxSubmit().data('jqxhr');
    $.when(xhr1, xhr2).then(function() {
        $('#form0').submit();
    }, function() {
        alert('Error');
    });
});
注意:你还应该包括Jquery表单插件

表单提交为空白的问题很可能是因为选项卡的设置方式隐藏了它们。我以前在某些元素上看到过这种情况,这些元素的父div设置为display:none,浏览器认为它不是一个有效的表单元素,因为用户看不到它。

试试这个

$('#subBtn').click(function(){
$('form').each(function(){
    $(this).parents('.tab selector').show();
    $(this).submit();
    $(this).parents('.tab selector').hide();
});
});

使用

$(function() {
    $('#subBtn').click(function(e){
        e.preventDefault();
        $('form').submit();
    });
    $('form').on('submit',function(e) {
        e.preventDefault();
        $.post( this.action, $(this).serialize() );
    });
});

概念验证

我自己解决了。我没有在每个选项卡上都有一个表单,而是简单地将每个选项卡项包装在一个包罗万象的表单中。伟大的工作。

谢谢大家的回答。