在rails4应用程序上,我有一个小脚本来处理ajaxified分页。以下代码通过android:alpha="0.5"
获取HTML块,而和应该作为脚本执行,并在新加载的分页链接上绑定index.js.erb
事件:
click
然后// pagination.js
$(function() {
$(".pagination a").on("click", $(".pagination a"), function() {
$(".pagination").html("Loading...");
$.getScript(this.href);
return false;
});
});
:
index.js.erb
第一次运行正常但是一旦ajaxed结果进入,// index.js.erb
$("#books").html("<%= escape_javascript(render("books")) %>");
事件就不再绑定到新的分页链接,而单击会导致整页加载。我必须在on('click')
内添加pagination.js
的相同代码,以确保click事件再次绑定到分页链接。
像这样:
index.js.erb
这似乎不正确,因为1.它不干燥2.我希望// index.js.erb
$("#books").html("<%= escape_javascript(render("books")) %>");
$(".pagination a").on("click", $(".pagination a"), function() {
$(".pagination").html("Loading...");
$(".loader").removeClass("hidden");
$.getScript(this.href);
return false;
});
正常工作;就像on('click, function(){ ... });
方法与旧版jQuery一样。
我在这里错过了什么吗?
答案 0 :(得分:1)
之所以发生这种情况,是因为点击事件没有绑定到页面上动态创建的内容,它只会绑定到页面加载时出现的元素(在您的情况下为.pagination a
),因此它只工作一次。
要做到这一点,你必须绑定click事件,如下所示,
$(document.body).on("click", ".pagination a", function(){
//your code goes here..
});
更多信息:
事件处理程序仅限于当前选定的元素;他们 在您的代码调用.on()时必须存在。 要确保元素存在且可以选择,请将脚本放在HTML标记中的元素之后,或者在文档就绪处理程序中执行事件绑定。或者,使用委派事件来附加事件处理程序。
委派活动的优势在于他们可以处理来自的活动 稍后添加到文档中的后代元素