我想将一个submit()处理程序附加到一个表单来运行ajax请求,当它返回时,表单正常提交自己。这可能吗? $('#myForm')。submit()将递归调用相同的函数。
我宁愿不将事件处理程序附加到单击提交按钮,因为并非所有用户都使用鼠标提交表单。像我一样,很多人只使用返回键。
答案 0 :(得分:6)
试试这个。在下面的代码中,我解析了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;
});
答案 1 :(得分:1)
这应该适合你:
$('form').submit(function(e) {
e.preventDefault();
var that = this;
$.post('url', function() {
that.submit();
});
});
e.preventDefault()
停止默认表单提交。然后你可以在dom元素上调用.submit()
来执行一个jQuery处理程序没有捕获的提交。
答案 2 :(得分:0)
您可以使用一个变量来标记是否已收到ajax响应。 这可能比取消绑定'submit'事件处理程序要优雅一点,但这是另一个想法。
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;
}
});