JQuery的`live()`和`submit()`问题

3

我想做类似于这样的事情,但是这个看起来像是无限次发生。

$("form").live("submit", function() { 

    if($(this).attr('action') != "ajax"){
        $(this).submit();
return true; // even i do this!! but form is NOT submited!!
}

else { /* doing the ajax stuff! */ }
});

在Chrome和Firefox中,经过一段时间后,表单会被提交,大约10秒钟,在IE中它会崩溃!

我知道当我说form.submit时,意味着我正在提交它并反复调用函数,我该如何避免这种情况?

1个回答

11

通过再次使用 .submit() 方法,它会冒泡回到 .live() 事件处理程序,这将导致无限循环。相反,您应该在此处调用本机的form.submit() 方法,像这样:

$("form").live("submit", function() { 
  if(this.action != "ajax") {
    this.submit();
  }
  else { /* doing the ajax stuff! */ }
});

此外.action是一个本地DOM属性,你可以通过这种方式访问它... 这里不需要jQuery的开销。


刚刚完美地工作了!谢谢Nick 聪明才智! 只是想知道Jquery的submit()和本地的有什么区别,以及第一次本地submit()将如何被.live处理?谢谢。 - user529649
@Nick - 这是第一次发生吗?还是JQuery的submit()绑定在加载表单时提交!? - user529649
@Omeid - 最初提交事件会被触发,这与submit() 方法是分开的 :) - Nick Craver
@nick,感谢您的回答,但是alert(this.action);显示的是[Object]而不是action属性的值。当我在这里尝试时http://jsfiddle.net/mZq2m/1/,起初我认为问题出在Native this和JQuery上,但是即使是没有JQuery的Javascript也是一样的。 - user529649
@Omeid - 你有可能有一个名为 action 的输入吗? - Nick Craver
显示剩余3条评论

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