javascript - 如何使用 jQuery 将事件附加到动态 HTML 元素?

标签 javascript jquery events dhtml

假设我有一些 jQuery 代码将事件处理程序附加到类 .myclass 的所有元素。

例如:

$(function(){
    $(".myclass").click( function() {
        // do something
    });
});

而我的 HTML 可能如下:

<a class="myclass" href="#">test1</a>
<a class="myclass" href="#">test2</a>
<a class="myclass" href="#">test3</a>

这没有问题。 但是,请考虑 .myclass 元素是否在未来某个时间写入页面。

例如:

<a id="anchor1" href="#">create link dynamically</a>
<script type="text/javascript">
$(function(){
    $("#anchor1").click( function() {
        $("#anchor1").append('<a class="myclass" href="#">test4</a>');
    });
});
</script>

在这种情况下,当用户单击 a#anchor1 时会创建 test4 链接。

test4 链接没有与之关联的 click() 处理程序,即使它具有 class="myclass"

基本上,我想编写一次 click() 处理程序,并将其应用于页面加载时出现的内容,以及稍后通过 AJAX/DHTML。知道如何解决这个问题吗?

最佳答案

我正在添加一个新答案以反射(reflect)以后 jQuery 版本中的更改。自 jQuery 1.7 起,.live() 方法已被弃用。

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

As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers. Users of older versions of jQuery should use .delegate() in preference to .live().

对于 jQuery 1.7+,您可以使用 .on() 将事件处理程序附加到父元素,并将结合 'myclass' 的 a 选择器作为参数传递。

http://api.jquery.com/on/

所以不是...

$(".myclass").click( function() {
    // do something
});

你可以写...

$('body').on('click', 'a.myclass', function() {
    // do something
});

这将适用于正文中带有“myclass”的所有标签,无论是已经存在还是稍后动态添加。

这里使用body标签,因为示例没有更紧密的静态环绕标签,但是当.on方法调用发生时存在的任何父标签都可以工作。例如,将添加动态元素的列表的 ul 标记如下所示:

$('ul').on('click', 'li', function() {
    alert( $(this).text() );
});

只要存在 ul 标签,这将起作用(还不需要存在 li 元素)。

关于javascript - 如何使用 jQuery 将事件附加到动态 HTML 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1359018/

相关文章:

java - Java 事件处理程序中的 NullPointerException

javascript - 在纯 JavaScript 中,什么相当于 "jQuery.on"?

javascript - 如何在 javascript 中获取 url 的 http ://www. blbah.com 部分?

javascript - "[native code] "是什么意思?

javascript - Jquery - 选择特定 div 内的跨度内容

Mockito 在 junit 中的事件

javascript - 获取动态导入模块失败 :

javascript - Jest - 模拟工厂功能

jquery - 如何使导航栏不重叠内容? Navbar-static-top 有效,但不能固定滚动

javascript - 使用Jquery根据文本动态添加div