【问题标题】:Jquery is not working on newly added elements to the dom with Plugin like JRate PluginJquery 不使用像 JRate 插件这样的插件处理新添加到 dom 的元素
【发布时间】:2015-08-05 15:22:15
【问题描述】:

我一直在互联网上搜索这个,我找到了一些有用的答案,但它们不足以解决我的问题(例如 Similar Problem but no solution provided for my problem)

我正在使用 JRate 插件,我正在使用 jQuery 在 div 中添加一个 div。问题是当我使用 jQuery 添加它并使用 JRate 函数时,它们不起作用。但是他们在没有附加新的div 的情况下工作。

我知道如何让它发挥作用。我将不得不使用$(document),但我不知道如何在这段代码中使用它。

这里是 HTML

<div class="jRate"></div>

这是我的 Jquery

$(".jRate").jRate({
    onSet: function(rating) {                             
        alert(rating);
    }
});

这是我的附加代码

var divjRate = "<div class='jRate'></div>";
$(divjRate).appendTo('.fb-jRate');

谁能告诉我如何在此处使用$(document) 或您拥有的任何其他替代解决方案。

【问题讨论】:

    标签: javascript jquery plugins jquery-plugins


    【解决方案1】:

    您需要先附加 html 元素,以便在 DOM 中注册。然后,你可以拨打jRate就可以了

    var divjRate = "<div><div class='jRate'></div></div>";
    
    // Append new element to container of choice
    $(divjRate).appendTo('.fb-jRate');
    
    // Use plugin on new element
    $('.jRate').jRate({
        onSet: function(rating) {                            
            alert(rating);
        }
    });
    

    【讨论】:

    • 好的,下一步。我需要重现它。你能把它放在一个小提琴里或者给我一个你正在使用它的网站吗?
    • 当你说它不工作时,你的意思是它绘制星星但 onSet 不工作?还是会报错?
    • 它绘制了星星,但 onSet 不起作用,并且它不会给出任何错误
    • 是他们的一种方法,我可以在使用 jquery 时将星号重置为 0,这样我就不必在正文中附加一个新星号
    • @usama,你能把它搞定,或者给我一个例子吗?
    【解决方案2】:

    您链接的解决方案适用于绑定事件侦听器,而典型的 jQuery 插件则不是这种情况,通常涉及 DOM 替换和其他事情。

    您需要将该方法应用于新添加的 DOM 元素。由于性能问题,不推荐使用 DOM 突变事件规范,并且期望浏览器跟踪 DOM 中发生的所有更改(以及哪些更改)是不现实的。

    例如,如果您通过 AJAX 调用添加新内容,则可以将该方法应用于 jqXHR.done() 函数中的新添加内容。


    更新:OP提供了一些代码,所以我添加了一种方法来为新添加的DOM元素初始化插件:

    // Declare new element
    var divjRate = "<div><div class='jRate'></div></div>";
    
    // Use plugin on new element
    $(divjRate).find('.jRate').jRate({
        onSet: function(rating) {                            
            alert(rating);
        }
    });
    
    // Append new element to container of choice
    $(divjRate).appendTo('.fb-jRate');
    

    【讨论】:

    • 这里是我的附加代码现在你能告诉我如何让它工作 var divjRate = "
      "; $(divjRate).appendTo('.fb-jRate');
    • @usama 可能是因为选择器问题。立即尝试我的更新答案。
    • 更新答案后仍然无法正常工作... :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多