取消一个jQuery的submit()方法

3
我有一个表单,调用了ajax post方法,使用了jquery的submit()方法:
<script>
  $(document).ready(function(){
    $('#myform').submit(function(){
      submitFunction(); /* does and Ajax post */
      return false;
    });
  });
</script>
<form id="myform" action="thisaction" method="post">
  <!-- ... -->
</form>

现在的问题是,当Ajax提交成功后,我想取消jquery对表单提交的override,以便让它执行正常的操作(thisaction)。我已经尝试过以下方法:

/* Inside submitFunction() */

$.ajax({

  /* random data... */

  success: function(jsonData)
           {
              $('#mylogin').submit(function(){
                ;
              });
           }
});

但是当我调试它时,第二次提交后submitFunction()仍然被调用... 我该如何禁止这个并允许一个normal的HTTP post请求到thisaction发生?


1
这个能帮助吗?e.preventDefault(); return false; - Stphane
设置一个标志,第二次只需检查。 - Dimag Kharab
2个回答

1
在提交处理程序中,在submitFunction()之前:
$(this).off('submit')

在ajax成功回调函数中:
$('#myform').submit();

这将解除返回false的提交处理程序并在调用ajax回调时重新提交表单。
您还可以尝试使用.one()绑定一个仅执行一次的处理程序:
$('#myform').one('submit', function() {...

我们有一个赢家!我仍然不太明白 "$('#myform').submit();" 是做什么的,但它有效。我认为它会自动提交表单而不等待用户输入... 但它确实等待,这正是我想要的行为。 - SylvainB
@BraveKenny。.submit()触发提交事件,基本上与原生的form.submit()相同,但jQuery添加了一些功能,如冒泡和兼容性修复。 - David Hellsing
是的...实际上,这个.submit()操作会触发Internet Explorer中的提交。我需要找到一个更兼容的解决方案。 - SylvainB
关于您的第二个选项,.one(),如果用户第一次输入有误,这不会导致问题吗?我想在ajax提交成功并响应“好”的答案时才更改提交。如果用户输入错误的数据,我希望让他再试一次。 - SylvainB
好的,实际上你的第二个解决方案效果更好。我在代码中将其放了两次:一次代替第一个,另一次用于“用户输入不正确”的情况。这样每当用户失败时,我就会再次绑定提交,直到响应正确为止。 - SylvainB

0

那似乎很有趣,但提交仍然会在此之后调用submitFunction()。 - SylvainB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接