在我的项目中,我正在开发一个函数,它使用.ajax()
从表中删除行,也从数据库中删除。我已经为用户点击删除按钮创建了我的功能。您可以理解,有几行,每行都有自己的删除按钮。
现在,当用户第一次点击其中一个时,如果他/她确定要删除该项目,则会出现一个弹出模式。当他/她单击是时,弹出窗口消失,行淡出。这一切都很完美,但是......
当您点击第二个删除按钮而不刷新页面时,JavaScript会触发当前请求的删除(和id
)+ de previous。如果你第三次这样做,它将触发当前的一个和前两个。
我尝试清空当前的var $(this).attr('data-page-id');
,但是当.ajax()
成功函数被触发时,它仍然会做同样的事情。
$('a.btn-page-delete').click(function() {
var curPageId = $(this).attr('data-page-id');
$('#delete-page').modal('show');
$('a#action-confirm').click(function() {
$.ajax({
type : 'POST',
url : '/pages/async/delete',
dataType : 'json',
data : { page : curPageId },
success : function(data) {
$('#delete-page').modal('hide');
console.log(curPageId);
console.log(data);
},
error : function() {}
});
});
});
答案 0 :(得分:8)
当你的外部点击事件处理程序被调用时
$('a.btn-page-delete').click(function() {
每次.bind()
$('a#action-confirm')
另一个点击事件处理程序.unbind()
。因此,每次执行外部事件时,都会添加一个事件处理程序。
我确信您可以而且应该以更好的方式重新构建和构建它,但在目前状态下,您唯一的选择是.off()
/ $('a#action-confirm').off('click').click(function() {
内部点击处理程序,例如< / p>
{{1}}
将删除之前通过jQuery绑定的任何点击事件处理程序。
参考:.off()