Ajaxed分页在rails 4上没有按预期工作

时间:2016-02-26 05:04:45

标签: jquery ajax ruby-on-rails-4

在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一样。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为点击事件没有绑定到页面上动态创建的内容,它只会绑定到页面加载时出现的元素(在您的情况下为.pagination a),因此它只工作一次。 要做到这一点,你必须绑定click事件,如下所示,

$(document.body).on("click", ".pagination a", function(){
  //your code goes here..
});

更多信息:

  

事件处理程序仅限于当前选定的元素;他们   在您的代码调用.on()时必须存在。   要确保元素存在且可以选择,请将脚本放在HTML标记中的元素之后,或者在文档就绪处理程序中执行事件绑定。或者,使用委派事件来附加事件处理程序。

     

委派活动的优势在于他们可以处理来自的活动   稍后添加到文档中的后代元素