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

24 浏览
0 Comments

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

我有一个监听器如下所示:

$('.delete').click(function() {
  ...一些操作
});

同时,在同一页上,另一个脚本以以下方式动态添加元素到DOM中:

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

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

请问有人能给我一些指导吗?

0
0 Comments

问题的出现的原因是因为jQuery监听器无法监听动态创建的DOM元素上的事件。解决方法是使用事件委托(event delegation)的方式,即通过在父元素上绑定事件,并指定需要监听的子元素的选择器作为第二个参数。

具体的解决方法是使用jQuery的on方法,代码如下:

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

这段代码告诉父元素监听点击事件。当父元素接收到点击事件时,它会检查事件的来源,如果来源匹配第二个参数指定的选择器,就会触发事件。这种方式被称为事件委托,它允许父元素接受事件并在成功匹配后触发相应的事件。这是一种常见的设计模式。

0
0 Comments

jQuery的监听器无法动态监听DOM元素上的事件的原因是因为监听器只会在页面加载时绑定事件,而对于动态创建的DOM元素,监听器并不会自动绑定事件。

解决方法是使用jQuery的`live`函数。`live`函数可以用来绑定事件到动态创建的DOM元素上。通过使用`live`函数,可以确保即使DOM元素是在页面加载之后创建的,事件仍然可以被监听到。

另外,还需要注意在动态创建的DOM元素上绑定和解绑事件。有时候,当一个链接被创建时,由于页面没有重新加载,链接可能会被重复绑定事件,导致出现问题。在这种情况下,只需要解绑链接上的事件即可解决问题。

下面是一个使用jQuery的`live`函数和解绑事件的示例:

// 使用live函数绑定点击事件到动态创建的链接上
$("a").live("click", function() {
  // 点击事件处理逻辑
});
// 解绑链接上的所有事件
$("a").unbind();

通过使用`live`函数和解绑事件,可以解决jQuery监听器无法动态监听DOM元素上事件的问题。

0
0 Comments

问题的原因是因为使用jQuery的监听器只会监听在绑定事件处理程序时已经存在的元素。如果想要监听动态创建的元素,可以使用`live()`函数,该函数可以与当前和未来的元素一起使用。

解决方法是根据jQuery 1.7的推荐方式,使用`.on()`函数,该函数可以替代`bind()`、`live()`和`delegate()`函数,并提供了所有附加事件处理程序所需的功能。

具体解决方法如下:$(document).on('click','.mybutton', function() { //handler });,这样可以将事件添加到文档元素上。

0