jQuery:如何为动态添加的HTML元素添加事件处理程序?
我有以下代码:
$(文件)。就绪(函数({ $( “点击”)。点击(函数(){ 警报('按钮被点击!'); }); }));
这很好用。
但是如果我向网页添加一个具有相同类的元素,如下所示:
$( '#点击')。点击(函数(){ $(“#area”)。append(“”); });
然后我之前添加到.click类的事件处理程序将不适用于这个新元素。
将事件处理程序添加到动态添加的元素的最佳方法是什么?
UPDATE
自从我发布这个答案以来已经有一段时间了,现在情况发生了变化:
$(document).on('click', '.click', function() { });
由于jQuery 1.7+应该使用新的.on()
并且不推荐使用.live()
。 一般的经验法则是:
- 除非你的jQuery版本不支持
.delegate()
否则不要使用.live()
.delegate()
。 - 除非你的jQuery版本不支持
.on()
否则不要使用.on()
。
另外,请查看此基准测试以查看性能差异,您将了解为何不应使用.live()
。
以下是我的原始答案:
使用代表或现场
$('.click').live('click', function(){ });
要么
$('body').delegate('.click', 'click', function() { });
在参考您的代码时,这样做的方法是。
$('.click').live('click', function(){ ... do cool stuff here });
使用.live()函数可以动态地将事件处理程序附加到DOM对象。 玩得开心!
对于在运行时动态添加到DOM的所有元素,请使用live
在jQuery 1.7之后,live方法只指向.on()方法。 而且我很难找到如何将事件处理程序绑定到加载后附加到DOM的元素。
$('body').live('click', '.click', function(){ //Your code });
这对我有用。 对于那些遇到麻烦的人来说,只是一个小小的提示。