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

http://api.jquery.com/live/

在jQuery 1.7之后,live方法只指向.on()方法。 而且我很难找到如何将事件处理程序绑定到加载后附加到DOM的元素。

 $('body').live('click', '.click', function(){ //Your code }); 

这对我有用。 对于那些遇到麻烦的人来说,只是一个小小的提示。