0

可能重复:
动态创建的元素上的事件绑定?

我通过 if 语句添加了一些链接,如下所示:

if(jQuery.inArray(keywords[i].toLowerCase(), wordFilter) == -1) {
    $('p.suggestions').append('<a href="#" class="suggestion">' + keywords[i] + "</a> ");
}

链接已正确添加。我使用这样的建议类注册每个链接的点击:

$('p.suggestions a').click(function(e) {
    e.preventDefault();
    t.add($(this).text());
});

当我在我的 html 文件中硬编码一个链接时,它工作正常,并且单击已注册并执行 t.add()。但是,当使用 if 语句添加链接时,它就不再起作用了。有人知道这是怎么回事吗?

4

4 回答 4

2

使用jQuery

$(document).on('click','p.suggestions a',function(e) {
    e.preventDefault();
    t.add($(this).text());
});
于 2012-12-29T14:53:23.423 回答
1

您应该将其“实时”绑定on

$(document).on( 'click', 'p.suggestions a', function(e) {
    e.preventDefault();
    t.add($(this).text());
});

仅通过绑定时click,处理程序绑定到所有选定的(意味着:所有现有的)元素。如果出现一个新元素,它对处理程序一无所知。使用所谓的“实时”绑定,您还可以通过侦听特殊选择器将处理程序绑定到现在不存在的元素。

于 2012-12-29T14:53:51.363 回答
1

动态添加元素时,最好将事件与 jQuery 绑定on-> http://api.jquery.com/on/

以前,livedelegate建议,但现在on是要走的路。

于 2012-12-29T14:53:56.800 回答
0

对于动态内容使用 on() 函数 Jquery!不推荐使用 live() 和 delegate()

$(document).on('click','p.suggestions a',function(e) {
    e.preventDefault();
    t.add($(this).text());
});
于 2012-12-29T14:53:53.547 回答