3

在我的项目中,我正在开发一个函数,该函数使用.ajax(). 当用户单击删除按钮时,我已经创建了我的函数。如您所见,有几行,每一行都有自己的删除按钮。

现在,当用户第一次单击其中一个时,会出现一个弹出模式,询问他/她是否确定要删除该项目。当他/她单击是时,弹出窗口消失并且行淡出。这一切都很完美,但是......

当您单击第二个删除按钮而不刷新页面时,JavaScript 会触发当前请求的删除 (and id) + de 前一个。如果您第三次执行此操作,它将触发当前一次和前两次。

我试图清空 current ,但是当成功函数被触发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() {}

        });

    });

});
4

1 回答 1

8

当您的外部单击事件处理程序被调用时

$('a.btn-page-delete').click(function() {

每次都会有.bind()另一个点击事件处理程序$('a#action-confirm')。因此,每次执行外部事件时,您都会再添加一个事件处理程序。

我相信您可以并且应该以更好的方式重新构建和构建它,但在目前的状态下,您唯一的选择是.unbind()/.off()内部点击处理程序,例如

 $('a#action-confirm').off('click').click(function() {

这将删除之前通过 jQuery 绑定的任何单击事件处理程序。

参考:.off()

于 2012-08-07T10:20:45.073 回答