我有一些功能,我想在文档准备就绪时以及调用Ajax之后工作,因为新项目被加载到需要选择的页面中。
我可以通过这样做来实现这一目标:
var ready;
ready = function(){
//my code here
};
$(document).ready(ready)
$(document).ajaxComplete(ready)
但这会导致一个问题,即每个Ajax调用似乎都会为函数运行添加另一个时间。在第一次AjaxComplete调用之后,它会运行一次,然后运行两次,然后运行三次等等。
当用户在页面上时,如何优雅地获取所有代码以便在任何时候运行我想要的一次?
这是一个Ruby on Rails应用程序,顺便说一句。
非常感谢。
答案 0 :(得分:2)
您正在寻找jQuery的.delegate
功能。它的作用是绑定到父元素,每当在其中触发事件时,它会检查生成事件的子元素是否与您提供的选择器匹配;如果是的话,它会解雇处理程序。例如,jQuery's docs中的以下示例会导致点击表格中所有现有和未来td
来切换“已选择”类:
$( "table" ).delegate( "td", "click", function() {
$( this ).toggleClass( "chosen" );
});
因此,如果向表中添加新行,单击它将切换“已选择”,即使在调用委托时该行不存在。
如果这有意义或者您有任何疑问,请告诉我们。)