答案更新
根据评论:
它适用于 Firefox,但不适用于 Google Chrome
此问题与 dom 就绪事件有关。这在 Firefox 中不起作用。我使用最新版本的 Chrome、FF、Edge、IE 测试了更改后的代码段。仅对于 FF,我需要使用事件加载而不是准备就绪。
一个可能的解决方案可以基于IFRAMES(如果你可以使用它们):
- 使用独特的按钮提交所有表格
- 插入或创建一个不可见的 div 容器
- 对于每个表单,在前一个 div 中插入一个 iframe
- 将具有更新数据的相应表单的内容添加到此类 iframe
- 在相应的 iframe 中提交每个表单
- 注意清空容器...
片段:
function onIframeReady(doc, html) {
doc.find('body').append(html);
//
// if it's needed to change the action atr use:
// doc.find('form').attr('action', 'new ac');
//
doc.find('form').submit();
}
$(function () {
$('#submitMoreForms').on('click', function(e){
$('#frmWrapper').empty();
$('form').each(function(idx, ele){
$(ele).find(':input').each(function(index, element) {
if (element.type == 'textarea') {
$(element).text($(element).val());
} else {
$(element).attr('value', $(element).val());
}
});
$('<iframe>', {
id: 'frm' + idx
}).appendTo('#frmWrapper').ready(function() {
if (window.mozInnerScreenX == null) { // if not firefox
onIframeReady($('#frm' + idx).contents(), ele.outerHTML);
}
}).one('load', function(e) {
if (window.mozInnerScreenX != null) { // if firefox
onIframeReady($('#frm' + idx).contents(), ele.outerHTML);
}
});
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="action1" method="post">
FORM1:<br/>
Name: <input type="text" name="name" />
Comment: <textarea name="comment"></textarea>
<input type="checkbox" name="vehicle" value="Bike"> I have a bike
<input type="checkbox" name="vehicle" value="Car" checked> I have a car
</form>
<form action="action2" method="post">
FORM2:<br/>
Name: <input type="text" name="name" />
Comment: <textarea name="comment"></textarea>
</form>
<form action="action3" method="post">
FORM3:<br/>
Name: <input type="text" name="name" />
Comment: <textarea name="comment"></textarea>
</form>
<input id="submitMoreForms" type="button" value="Submit More Forms" />
<div id="frmWrapper" style="display: none;"></div>