jQuery监听器不“监听”动态创建的DOM元素上的事件

我有一个像这样的听众:

$('.delete').click(function() { ...some stuff }); 

此外,在同一页面上,另一个脚本以这种方式动态地向DOM添加元素:

 $('#list').append('delete'); 

我的问题是监听器不“监听”这些动态创建的元素。

请问有人可以解决一些问题吗?

它只会监听绑定事件处理程序时存在的元素。 如果您希望它监听动态创建的元素,您可以使用live()函数,该函数适用于当前和未来的元素。

编辑:从jQuery 1.7开始,推荐的方法是使用.on()函数,它通过提供附加事件处理程序所需的所有function来替换.bind() .delegate().delegate()

将事件绑定到尚不存在的元素是不可能的。 正如Yogurt所表达的那样,你可以实现这一点的方法是使用’on’并指定你想要用作函数的第二个参数的选择器。

 this.$someStaticParent.on('click', 'li', functionName); 

这样做,告诉父元素持有一个事件进行点击。 每当它被点击时,它将检查事件来自何处,如果它与参数2匹配,则它会触发一个事件。 这称为事件委托。 您允许父级接受事件,然后在成功比较时触发事件。 这是一种常见的设计模式。

是的,请查看JQuery Livefunction。 还记得绑定和解除绑定事件。 有链接在每次创建时都保持绑定的问题,但由于页面没有重新加载,链接会有5或6个与之关联的点击事件,并导致问题。 只需要将事件解除绑定链接。

当然。

动态侦听器不是动态的。

 $('.delete').click(function() { 

将侦听器连接到所有现有元素。

当您添加另一个元素时,您需要重新运行该元素以确保新元素获得相同的处理程序。

基本上,新元素不会被听取,因为你没有附加新的处理程序;)