【问题标题】:jQuery .click() not triggering on links dynamically created with .wrapInner()jQuery .click() 不会触发使用 .wrapInner() 动态创建的链接
【发布时间】:2010-09-09 23:59:01
【问题描述】:

我遇到了这个脚本的问题,我一生都无法弄清楚它有什么问题。快速浏览一下我所拥有的:

HTML:

<ul>
    <li id="wildcard_1">
        <div>
            <a href="#">test</a>
        </div>
    </li>
</ul>
<a href="#" class="reset">reset</a>

jQuery:

// Main function
$("[id^=wildcard_]").children('div').children('a').click(function() {
    $(this).replaceWith($(this).text());
});

// Temporary reset function
$("a.reset").click(function() {
    $("[id^=wildcard_]").children('div').wrapInner('<a href="#"></a>');
});

“测试”链接在第一次被点击时会正常工作——它正在被转换为纯文本)。为了不在这里粘贴大部分脚本,我创建了一个临时函数,它将包装div 的内容,将“测试”纯文本转换回链接。这就是问题所在——第一个函数的.click() 监听器将不再在这个动态创建的链接上触发,FireBug 也不会抛出任何错误或警告。

你也可以在 JSfiddle 上看到这个直播:http://jsfiddle.net/rWz69/

对此的任何帮助将不胜感激!

【问题讨论】:

    标签: jquery dynamic triggers hyperlink


    【解决方案1】:

    您可以使用.live() 处理程序,如下所示:

    $(document).on("click", "[id^=wildcard_] > div > a" , function() {
      $(this).replaceWith($(this).text());
    });
    

    Here's your fiddle example updated/working with the above code :)

    【讨论】:

    • 1 分钟前提问,23 秒前回答。我很确定你是一个机器人,尼克。
    • 简直太棒了,而且太快了!有趣的是,看到您的回答后,我的第一个想法是“上帝,我的选择器很丑”:) 无论如何,如果问得不多,因为我的方法几乎让我发疯,请您解释一下几句话为什么它不起作用,所以我将来可以避免它?非常感谢,伙计!
    • @FreekOne - 当然! .click() 将点击处理程序附加到选择器当时找到的元素,这是重要的一点,元素。如果添加了新元素......运气不好,他们没有得到处理程序。 .live() 而是在 document 上附加了一个事件侦听器,该侦听器侦听 click 冒泡,因此它对当前和未来元素的工作方式相同:)
    • 啊,我明白了!非常感谢,再次! :)
    猜你喜欢
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2018-10-05
    • 2012-05-23
    相关资源
    最近更新 更多