可以ajax:成功.on()绑定到类选择器?

时间:2013-08-02 00:14:16

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

当我将它绑定到类选择器时,我的成功回调没有触发。

班级实例:

<div id="entries">
  ...
  <a href="/entries/user_tag_search?search=Fly+Tying" class="entry-ajax-tag-search" data-remote="true">Fly Tying</a>
  ...
</div>

回调定义:

  $(function(){
    $("#entries").on("ajax:success", ".entry-ajax-tag-search", function(){
      $(".entries-accordion").accordion({ collapsible: true, active: false, heightStyle: 'content', event: "click keyup" });
    })
  })

远程ajax调用动态替换#entries内容。

我对.on的理解是,它会从包含的元素中捕获ajax:success,并且#entries`是静态的(在初始页面加载时可用,并且从不重写)绑定将持续存在。

我可以回到.bind,但我想知道为什么在我做之前这不起作用。

我不知道它是否相关,但回调确实显示在chrome调试器的链接上。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我有同样的情况,“#entry”永远不会动态替换,但on没有绑定我的元素。我找到的解决方案(不使用bind)是将on附加到document

$(document).on("ajax:success", "#entries .entry-ajax-tag-search", function(){
  ...
})

答案 1 :(得分:0)

我无法让这个工作,我相信这是jquery_ujs的一个问题,但我没有挖到它。

我的工作是将js处理程序中要执行的.on()放入视图返回的html的<script> </script>部分:

<div id="entries-accordion-for-subscription-<%= @current_subscription_id %>" class="accordion entries-accordion">
  <%= render @entries %>
</div>
<script>
  /* MAGICAL!!!!! DO NOT TOUCH!!!!!!!
     This *usually* works, although it appears to be DOM loading sensitive once in a while. */
    $(".entries-accordion").accordion({ collapsible: true, active: false, heightStyle: 'content', event: "click keyup" });
</script>

不漂亮,但现在已经完成了工作。

我希望这会有所帮助。