用一个按钮提交两个表格
我有两种HTML格式,一种是在使用PHP进入数据库时提交数据,另一种是将用户引导至一个贝宝付款页面,我的问题是用户必须提交两个表格,当然我不希望他们得做。 反正有两种形式使用一个提交按钮吗?
(欢迎使用Javascript)
你应该可以用JavaScript做到这一点:
<input type="button" value="Click Me!" onclick="submitForms()" />
如果你的表格有ID:
submitForms = function(){ document.getElementById("form1").submit(); document.getElementById("form2").submit(); }
如果你的表格没有身份证,但是有姓名:
submitForms = function(){ document.forms["form1"].submit(); document.forms["form2"].submit(); }
表单提交导致页面导航到表单的action
。 所以,你不能以传统的方式提交这两个表格。 如果您尝试通过在每个表单上连续调用form.submit()
来使用JavaScript,那么除了最后一次提交之外,每个请求都将被中止。 所以,你需要通过JavaScript异步提交第一个表单:
var f = document.forms.updateDB; var postData = []; for (var i = 0; i < f.elements.length; i++) { postData.push(f.elements[i].name + "=" + f.elements[i].value); } var xhr = new XMLHttpRequest(); xhr.open("POST", "mypage.php", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send(postData.join("&")); document.forms.payPal.submit();
您可以使用AJAX提交第一个表单,否则提交一个将阻止提交其他表单。
在Chrome和IE9(我也猜测所有其他浏览器)只有后者将生成一个套接字连接,第一个将被丢弃。 (浏览器检测到这一点,因为这两个请求都是在上面的代码中的一个JavaScript“时间片”内发送的,并且丢弃除最后一个请求以外的所有请求。
如果你有一些事件回调做第二次提交(但收到回复之前),第一个请求的套接字将被取消。 这绝对没有什么可推荐的,因为在这种情况下,服务器可能已经处理了你的第一个请求,但你永远不会知道。
我建议你使用/生成一个单一的请求,你可以在服务器端进行处理。
目前选择的最佳答案太模糊,不可靠。
这感觉对我来说是一个相当安全的方式来做到这一点:
(Javascript:使用jQuery来写它更简单)
$('#form1').submit(doubleSubmit); function doubleSubmit(e1) { e1.preventDefault(); e1.stopPropagation(); var post_form1 = $.post($(this).action, $(this).serialize()); post_form1.done(function(result) { // would be nice to show some feedback about the first result here $('#form2').submit(); }); };
发布第一个表单而不更改页面,等待过程完成。 然后张贴第二个表格。 第二篇文章将改变页面,但是你也可能想要为第二个表单创建一些类似的代码,获得第二个延迟对象( post_form2 ?)。
不过,我没有测试代码。
如果你想用一个按钮提交两个表单,你需要这样做:
1-使用setTimeout()
2-允许显示弹出
<script> function myFunction() { setTimeout(function(){ document.getElementById("form1").submit();}, 3000); setTimeout(function(){ document.getElementById("form2").submit();}, 6000); } </script> <form target="_blank" id="form1"> <input type="text"> <input type="submit"> </form> <form target="_blank" id="form2"> <input type="text"> <input type="submit"> </form>
javascript不会同时提交两个表单。 我们提交两个表单,一个按钮不是在同一时间,而是在secounds之后。
编辑: 当我们使用这个代码时,浏览器不允许弹出。
如果你像我这样使用你的软件的代码只是设置浏览器显示弹出,但如果你在设计网站使用它,浏览器是一个障碍和代码不运行。
如果你有一个常规的提交按钮,你可以添加一个onclick事件来做到这一点:
document.getElementById('otherForm').submit();