2013-08-02 34 views
0

当我将它绑定到类选择器时,我的成功回调不会触发。可以将ajax:success .on()绑定到类选择器吗?

实例的类的:

<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调试器的链接上。

在此先感谢。

+0

[这是你使用的插件](https://github.com/rails/jquery-ujs/blob/master/src/rails.js) – Ohgodwhy

+0

是的,我正在使用jquery_ujs。 –

回答

0

我无法得到这个工作,我相信这是与jquery_ujs一个问题,但我还没有挖进去。

我的解决办法是把我在.on()处理想执行到视图返回的HTML的<script> </script>部分js

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

不漂亮,但它得到现在所做的工作。

我希望这会有所帮助。

1

我有同样的情况,“#entries”从不更换动态,但on不具约束力我的元素。我发现(不使用bind)的解决方案是连接ondocument

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

对此也没有开火,我会仔细检查以确保#entries不会被替换。谢谢。 –

+0

jQuery的奥秘...对不起朋友,祝你好运 – Benj

+0

现在我有一个'$('select#blah')。on('change',...)''...你解决了它在你身边? – Benj

相关问题