4

我有一个无限滚动的页面。ajax 功能适用于最初加载时页面上存在的表单,但不适用于从无限滚动 ajax 功能加载的表单。我已经搜索了大约 5 天试图找到答案,但还没有。这是javascript的一部分:

$("form:not(.member)").submit(function() {
     var status_id = $('#status_id').val(), 
    etc..........

:not(.member)部分的原因是页面上的其他表单(例如搜索表单)不包含在脚本中。

我试过了

 $("form:not(.member)").live('submit', function() {

 $("form:not(.member)").on('submit', function() {

 $('body').delegate('submit', 'form:not(.member)', function() {

这些都不适用于初始页面加载后加载的表单。有没有人有任何其他建议?顺便说一句,我正在使用 jquery 1.7.1。我也试过

$("form:not(.member)").bind('submit', function()
4

4 回答 4

4

您在这里使用了错误的事件委托。

表单也是动态加载的,因此$("form:not(.member)")在代码运行时它们不包含在内,它们还不存在。

在包含表单的父元素上使用委托:

$('#formsContainer').on('submit', 'form:not(.member)', function() {
     ...
});
于 2012-01-22T17:54:10.333 回答
2

以上答案均无效。解决方案是将 onclick="function" 分配给所有评论表单,包括已加载的表单。

于 2012-01-30T00:25:58.687 回答
2

您的语法是错误的,仅此而已。这些功能应该可以工作。使用.on()为例:

$('#someListener').on('submit', 'form:not(.member)', function() { ... });

someListenerAJAX 函数永远不会破坏的祖先元素在哪里。如果你试图绑定到一个被破坏的元素,你的监听器也会丢失。

不得不承认,我认为这'form:not(".member")'部分对我来说也不合适。你确定这是正确的语法not吗?我只是在这里相信你的话。

无论如何,有一个更好的方法:要么#someListener 是一个祖先,其中没有你的其他表单(如搜索表单),要么你给这种特定类型的表单一个类。因此,您可以只针对这种形式,而不是排除.member表单:

$('#someListener').on('submit', '.dynamicForm', function() { ... });

或者,如果 Ajax 内容块(表单和所有内容)具有某种包装器,您可以向它添加一个类(例如,".ajaxBlock")并改为这样做:

$('#someLIstener').on('submit', '.ajaxBlock form', function() { ... });
于 2012-01-22T17:52:53.870 回答
0
$("#parentContainer").on("submit", "form:not(.member)", function() { // code });
于 2012-01-22T18:02:55.853 回答