jQuery .click()不会在使用.wrapInner()动态创建的链接上触发

Val*_*sel 1 jquery triggers dynamic hyperlink

我遇到了这个剧本的问题,对于我的生活,我无法弄清楚它有什么问题.快速浏览我的内容:

HTML:

<ul>
    <li id="wildcard_1">
        <div>
            <a href="#">test</a>
        </div>
    </li>
</ul>
<a href="#" class="reset">reset</a>
Run Code Online (Sandbox Code Playgroud)

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>');
});
Run Code Online (Sandbox Code Playgroud)

"测试"链接正常工作,因为它应该是第一次被点击 - 它被转换为纯文本).为了不在这里粘贴大部分脚本,我创建了一个临时函数,它将包装内容div,将"test"纯文本转换回链接.这就是它变得混乱的地方 - .click()第一个函数的监听器将不再触发这个动态创建的链接,而FireBug不会抛出任何错误或警告.

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

任何有关这方面的帮助都将不胜感激!

Nic*_*ver 11

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

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

这是你的小提琴示例更新/使用上面的代码 :)

  • @FreekOne - 当然!一个`.click()`将一个单击处理程序附加到选择器在*时找到*的元素,这是元素**的重要位**.如果添加了新的元素......运气好的话,他们没有得到一个处理程序.`.live()`在`document`上附加一个事件监听器,监听`click`冒泡,所以它适用于当前和未来的元素:) (3认同)
  • 1分钟前被问到,23秒前回答.我很确定你是一个半机械人,尼克. (2认同)