0

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

类的实例:

<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" });
    })
  })

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

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

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

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

提前致谢。

4

2 回答 2

1

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

$(document).on("ajax:success", "#entries .entry-ajax-tag-search", function(){
  ...
})
于 2013-08-02T01:22:18.243 回答
0

我无法让它工作,我相信这是一个问题,jquery_ujs但我还没有深入研究它。

我的解决方法是将js要在.on()处理程序中执行的内容放入<script> </script>视图返回的 html 部分中:

<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>

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

我希望这有帮助。

于 2013-08-17T13:46:58.643 回答