如何在加载Ajax的元素上调用JavaScript

时间:2013-08-14 19:53:09

标签: javascript jquery ruby-on-rails ajax

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

我可以通过这样做来实现这一目标:

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

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

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

当用户在页面上时,如何优雅地获取所有代码以便在任何时候运行我想要的一次?

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

非常感谢。

1 个答案:

答案 0 :(得分:2)

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

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

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

如果这有意义或者您有任何疑问,请告诉我们。)