我有一个表单,当用户单击提交按钮时,我想在执行表单操作(转到下一页)之前运行一个单独的PHP脚本。
当然,我可以用evt.preventDefault();
停止表单操作,然后我可以激发我的jquery $.post
调用,但就我所见,我不能"恢复"或撤消这个preventDefault调用。
那么,在用户单击提交按钮后,但在用户被重定向到表单动作标记中定义的下一页之前,执行处理某些信息的脚本的最佳方式是什么呢?
(当然,我可以把数据结转到下一页,然后执行我想要的任何操作——但在这种情况下,我想把它分开)。
谢谢你的建议!
您可以尝试以下操作:
var posted = false;
$('form').on('submit', function(ev) {
if ( ! posted ) {
ev.preventDefault();
$.post(url).done(function() {
posted = true;
$('form').trigger('submit');
});
}
posted = false;
});
或者更简洁,使用额外的参数:
$('form').on('submit', function(ev, posted) {
if ( ! posted ) {
ev.preventDefault();
$.post(url).done(function() {
$('form').trigger('submit', [true]);
});
}
});
-
您的$.post调用可以同步运行,因此在收到服务器的响应之前,表单不会提交。
-
您可以通过编程方式提交表单,也许可以在回调函数中提交。
在form
上防止默认,然后运行post
,在post
成功后,通过id瞄准表单并使用.submit();
$('#submit-button').click(function(e) {
e.preventDefault();
$.post({
url:'url',
success:function() {
$('#formid').submit()
}
});
});
- 继续使用evt.preventDefault()
- 调用$.ajax()来运行php脚本
- 在$.ajax()成功/失败回调中,检查要运行的php脚本的输出,并相应地进行$.post调用(或不进行)
您可以随时挂起点击事件,并完成您的工作。完成后,只需执行$(form).submit();
工作示例
$("#submitbutton").click(function(e) {
e.preventDefault();
// do your ajax stuff here.. $.post().
$("#form").submit();
});
您可以使用本机提交函数,而不是jQuery的submit(),它会再次通过事件处理程序
$('form').submit(function(e){ // change form to your form id
e.preventDefault();
var el = this; // store this form in variable
$.post('/echo/html/',data,function(d){ // your post function
el.submit(); // trigger native submit function in success callback
});
});
FIDDLE
在表单标记中,添加onsubmit="myfunction()"