我正在处理这样的表单提交:
$('#some-form').submit(function(ev) {
var $form = $(this);
$.getJSON('/some/endpoint', function(data) {
if (data.somecondition) {
$form.submit(); // <- not doing what I want
}
});
return false;
});
所以,我开始一个异步的getJSON调用,然后返回false来停止表单提交。在getJSON回调中,在某些情况下,我想实际提交表单。但是触发submit()只会再次调用处理程序并重复该过程。
我知道我可以取消绑定提交处理程序然后提交,但是必须有更好的方法,对吧?如果没有更好的方法,那么构造此代码以取消绑定提交处理程序的最佳方法是什么?
答案 0 :(得分:3)
事实证明它实际上非常简单,只需在元素的非扩展版本上调用submit()
:
$form.get(0).submit();
此处示例:http://jsbin.com/eyuteh/7/edit#html
警告:请参阅@Avi Pinto的评论。
答案 1 :(得分:1)
请勿在步骤1中提交表单,使用常规按钮,并通过onclick调用您的功能,这样您就不必担心提交事件管理。
您可以通过这种方式直接在回调中调用提交,而无需担心进入循环。
答案 2 :(得分:0)
你总是可以在jQuery中处理表单提交:
$('#some-form').submit(function(ev) {
var $form = $(this);
$.getJSON('/some/endpoint', function(data) {
if (data.somecondition) {
//$form.submit(); // <- not doing what I want
//untested, but you should get the idea
$.ajax({
type: 'POST',
url: $form.attr('action'),
data: $form.serialize(),
success: function() { alert('success!') }
});
}
});
return false;
});
答案 3 :(得分:0)
使用旗帜..
$('#some-form').submit(function(ev) {
if($form.data("canSubmit")) return true;
var $form = $(this),
$form.data("canSubmit",false);
$.getJSON('/some/endpoint', function(data) {
if (data.somecondition) {
$form.data("canSubmit",true);
$form.submit(); //this time it will submit
}
});
return false;
});