为什么click()不能用于附加元素
Why click() does not work for appended elements?
我有一个<td>
,当我点击它时,它会显示一个警告,其中包含以下消息:点击
我的问题是,当我附加一个新的<td>
,然后当我点击它,我没有看到任何警报。为什么?如何为附加元素设置event ?
这是一个小提琴,解释了我所说的。
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
委托点击事件
$("body").on("click","td",function(){
alert('clicked');
});
这将从父元素为"body"且目标元素为"td"的元素中获取click事件,然后使用回调函数。这个委托过程检查每个点击事件,并在事件发生时完成。
您在问题中显示的单击过程只会在执行时分配一次事件。因此,只有当时匹配的"td"才会接收事件处理程序。
由于您是在脚本中创建这些元素,因此您还有另一个选择,即在将它们附加到页面之前为它们分配处理程序。
$(".addnewrow").click(function(){
var row = $("<tr><td>new</td></tr>");
$("td",row).click(function(){
alert("clicked");
});
$("table").append(row);
});
这取决于页面上发生的其他事情,哪种方法最适合。
相关文章:
- 用于检查数组中是否存在元素的javascript自定义方法
- 在ajax成功后,cluetip不适用于首次点击活动元素
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- Rails/Javascript链接到用于切换多个元素的函数
- 是否有任何可能的原因使我应该指定类型=“”;按钮“;用于我的按钮元素
- 我们怎样才能将内含子J用于一组特定的元素
- querySelectorAll不适用于指定的元素
- 为什么样式属性不适用于使用DOMParser创建的元素
- 将数组元素附加到FormData dos'不适用于Firefox 15
- 用于各个元素的Ajax加载程序
- 使用jquery验证函数不适用于select元素
- 为什么Bootstrap typeahead不适用于具有相同ID的输入元素
- 用于呈现kbd标记元素的Javascript
- 单击不适用于新元素
- 事件不适用于通过Ajax推杆的元素
- 字符计数不适用于动态创建的元素
- 数组函数不适用于从元素文本创建的JavaScript数组
- javascript正则表达式,用于编辑元素内部的css样式属性
- 在函数中定位动态创建的HTML元素(用于追加事件 - 而不是点击!)jQuery
- 使用 JavaScript 定位浮动元素(用于动画)