javascript - 为什么 click() 不适用于附加元素?

标签 javascript jquery html css

<分区>

我有一个 <td>当我点击它时,它会显示一条警告信息:clicked

我的问题是当我附加一个新的 <td> 时,然后当我点击它时,我没有看到任何警报。为什么?以及如何为附加元素设置事件?

Here是一个解释我所说内容的 fiddle 。

HTML:

<table> <tr class = 'test'> <td> old </td> </tr> </table>
<br><br>
<div class ='addnewrow'>append new row</div>

CSS:

.addnewrow{
    border:2px solid;
    padding: 4px;
    text-align: center;
    cursor: pointer;
}

td{
    cursor: pointer;
}

JS:

$(".addnewrow").click(function(){
$("table").append('<tr><td>new</td></tr>');
});

$("td").click(function(){
alert('clicked');
});

最佳答案

使用 on 委托(delegate)点击事件。

$("body").on("click","td",function(){
    alert('clicked');
});

这将从父级为“body”且目标为“td”的元素获取点击事件,然后使用回调函数。此委托(delegate)过程检查每个点击事件并在事件发生时完成。

您在问题中显示的点击过程只会在执行时分配一次事件。结果,只有当时的“td”匹配会收到事件处理程序。

由于您是在脚本中创建这些元素,因此您还有另一个选择,即在将它们附加到页面之前为它们分配处理程序。

$(".addnewrow").click(function(){
    var row = $("<tr><td>new</td></tr>");
    $("td",row).click(function(){
        alert("clicked");
    });
    $("table").append(row);
});

这取决于页面上还发生了什么,哪种方法最适合。

关于javascript - 为什么 click() 不适用于附加元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32832117/

相关文章:

javascript - 设置可变长度二维数组

javascript - 正则表达式匹配邮政编码和第一个字符

javascript - 从 Twitter REST API 的实体(主题标签、链接、提及...)创建指向推文文本的链接

html - 使用 VBA 动态创建 HTML 表格行

javascript - 动态添加嵌套表单

javascript - jQuery UI Draggable,在固定父级中具有自定义包含

javascript - AngularJS 之外的 AngularJS 的 document.ready 替代方案

html - 从表格中删除边框并增加尺寸

javascript - Angular Directive(指令)未加载

javascript - Node.js:可控并发while循环