我想要一个submit()处理程序附加到一个窗体来运行一个ajax请求,当它返回时,表单正常提交自己。这可能吗? $('#myForm')。submit()将递归地调用相同的函数。jquery调用自定义表单提交,然后正常
我宁愿不将事件处理程序附加到提交按钮的单击上,因为并非所有用户都使用鼠标提交表单。很多人和我一样,只是使用返回键。
我想要一个submit()处理程序附加到一个窗体来运行一个ajax请求,当它返回时,表单正常提交自己。这可能吗? $('#myForm')。submit()将递归地调用相同的函数。jquery调用自定义表单提交,然后正常
我宁愿不将事件处理程序附加到提交按钮的单击上,因为并非所有用户都使用鼠标提交表单。很多人和我一样,只是使用返回键。
试试这个。在下面的代码中,我将绑定Ajax成功处理程序中的表单提交事件处理程序,然后提交表单。
$('form').bind('submit', function(){
//Do ajax call here
$.ajax({
url: "url",
success: function(){
//On success do what you want to do
//and then ubind the submit event handler and submit the form
$('form').unbind('submit').submit();
}
});
//Prevent default form submit
return false;
});
这应该为你工作:
$('form').submit(function(e) {
e.preventDefault();
var that = this;
$.post('url', function() {
that.submit();
});
});
e.preventDefault()
停止默认的形式提交。然后你可以在dom元素上调用.submit()
来执行一个未被jQuery处理程序捕获的提交。
有趣。我会试试这个。我很难看到为什么that.submit()不会触及preventDefault()调用? – UncleCheese
你可以有一个变量来标记是否收到了ajax响应。 这可能比解除“提交”事件处理程序稍微优雅一些,但这是另一个想法。
var ajaxResponse = false;
$('form').submit(function() {
var form = $(this);
if(ajaxResponse == false){
$.post('url', function() {
ajaxResponse = true;
// Do something
form.submit();
});
return false;
}else{
return true;
}
});
解除绑定!咄!谢谢,我会尝试,但我已经知道它会起作用。 :) – UncleCheese
@UncleCheese - 如果它对你有帮助,你能把这个标记为答案吗? – ShankarSangoli