我有一个确认框,当单击删除按钮时,会显示确认警报,
函数
<script type="text/javascript">
$('.confirm').on('click', function () {
return confirm('Are you sure you want to delete ?');
});
</script>
每当我为任何html元素添加一个类时,它都运行良好,直到我将其添加到此函数中,该类才停止工作
$(document).ready(function() {
$('#list').dataTable({
"ajax":{
url :"list.php",
type: "GET",
error: function(){
$("#post_list_processing").css("display","none");
}
},
"columns": [
{ "data": "title" },
{ "data": "description" },
{
"data": function(item) {
return '<a class="confirm" href="delete.php?id=' + item.id + '">delete</i></a>';
}
}
]
});
});
答案 0 :(得分:2)
好像您在这里有计时问题。
调用$('.confirm').on('click', function () { /* ... */});
时,会将单击处理程序附加到当前在DOM中的所有带有“ confirm”类的元素。
稍后再使用“ confirm”类添加另一个元素时,将不会为该新元素注册处理程序。
解决方案是在将新元素添加到DOM后,重新注册点击处理程序 :
$('.confirm').off('click'); // remove old handlers
$('.confirm').on('click', function () { /* ... */}); // register handlers again for all current elements
答案 1 :(得分:0)
问题似乎是当您进行事件绑定时.confirm按钮尚未准备好。请尝试以下方法:
$('body').on('click', '.confirm', function () {
return confirm('Are you sure you want to delete ?');
});
这里发生的变化是,我们实际上将click事件绑定到了主体,该主体已经可用,但是随后过滤了回调以仅在实际的click-target是“ .confirm”元素时执行。
答案 2 :(得分:0)
jQuery在运行时绑定事件侦听器。如果确认元素不在页面上,则不会绑定任何元素。
要避免这种竞争情况,请将事件绑定到最接近动态生成数据的静态元素。
$(‘#list’).on(‘click’, ‘.confirm’, function(){
...
})
虽然您可以将事件绑定到文档或body
元素,但是有两个原因会使您使处理程序更靠近受影响的数据: