如何在使用Ajax加载的元素上调用JavaScript
我有一些功能,我想在文档准备好时以及在调用Ajax之后使用,因为需要选择的页面中加载了新项目 我可以通过这样做来实现这一点:如何在使用Ajax加载的元素上调用JavaScript,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我有一些功能,我想在文档准备好时以及在调用Ajax之后使用,因为需要选择的页面中加载了新项目 我可以通过这样做来实现这一点: var ready; ready = function(){ //my code here }; $(document).ready(ready) $(document).ajaxComplete(ready) 但这会导致一个问题,即每个Ajax调用似乎都会为函数的运行增加另一个时间。在第一次AjaxComplete调用之后,它运行一次、两次、三次,以此类推 当用
var ready;
ready = function(){
//my code here
};
$(document).ready(ready)
$(document).ajaxComplete(ready)
但这会导致一个问题,即每个Ajax调用似乎都会为函数的运行增加另一个时间。在第一次AjaxComplete调用之后,它运行一次、两次、三次,以此类推
当用户在页面上时,我如何优雅地让所有代码以我想要的方式在任何时候运行一次
顺便说一句,这是一个RubyonRails应用程序
非常感谢。您正在寻找jQuery的
.delegate
功能。is所做的是绑定到父元素,每当在其内部触发事件时,它都会检查生成事件的子元素是否与您提供的选择器匹配;如果它这样做了,它将触发处理器。例如,下面的示例导致单击表中所有现有和未来的td
s以切换“所选”类:
因此,如果您向表中添加新行,单击它将切换“已选择”,即使在调用委托时该行不存在
让我知道这是否有意义,或者您是否有任何问题:)神奇的词语是事件委派。不完全是,它只将其绑定到一个元素,即表。当事件传播到表中时,jQuery测试
event.target
是否匹配给定的选择器(“td”
),如果匹配,则运行回调,使this
等于event.target
。这在用例中非常有效。我将把它保留一段时间,看看是否有其他解决方案可以在更一般的意义上应用,而不是改变所有的函数。感谢您的快速回复@KevinB我的意思是,它比字面上更有效地绑定,但更新了答案以反映内部工作。现在看起来好点了吗?(如果有任何您想添加的内容,请随意编辑)是的,那更好。:)
$( "table" ).delegate( "td", "click", function() {
$( this ).toggleClass( "chosen" );
});