在执行表单操作之前创建$ .post
我有一个表单,当用户单击提交按钮时,我想在执行表单操作(转到下一页)之前运行单独的PHP脚本。
当然我可以用evt.preventDefault();
来停止表单操作evt.preventDefault();
然后我可以解雇我的jquery $.post
调用但是我无法“恢复”或撤消这个preventDefault调用,据我所见。
那么,在用户单击提交按钮之后执行处理某些信息的脚本的最佳方法是什么?但是在用户被重定向到表单操作标记中定义的下一页之前?
(当然,我可以在下一页inheritance数据并执行我想要的任何内容 – 但在这种情况下,我希望将其分开)。
谢谢你的任何建议!
你可以尝试这样的事情:
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
,on 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 }); });
小提琴
在表单标记中,添加onsubmit="myfunction()"