1

当文档准备好时以及在调用 Ajax 之后,我有一些我想要工作的功能,因为新项目被加载到需要选择的页面中。

我可以这样做:

var ready;
ready = function(){
  //my code here
};

$(document).ready(ready)
$(document).ajaxComplete(ready)

但这会导致一个问题,即每个 Ajax 调用似乎都会为函数运行添加另一个时间。在第一次 AjaxComplete 调用之后,它会运行一次,然后是两次,然后是 3 次,以此类推。

当用户在页面上时,如何优雅地让所有代码在任何时候按我想要的方式运行一次?

顺便说一句,它是一个 Ruby on Rails 应用程序。

非常感谢。

4

1 回答 1

2

您正在寻找 jQuery 的.delegate功能。它的作用是绑定到父元素,每当在其中触发事件时,它都会检查产生事件的子元素是否与您提供的选择器匹配;如果是这样,它将触发处理程序。例如,jQuery 文档中的以下示例导致单击td表中所有现有和未来的 s 以切换“选择”类:

$( "table" ).delegate( "td", "click", function() {
  $( this ).toggleClass( "chosen" );
});

因此,如果您向表中添加新行,即使在调用委托时该行不存在,单击它也会切换“已选择”。

让我知道这是否有意义或者您有任何问题:)

于 2013-08-14T20:07:36.980 回答