Javascript ajax成功函数多次触发

时间:2012-08-07 10:17:35

标签: javascript ajax

在我的项目中,我正在开发一个函数,它使用.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() {}

        });

    });

});

1 个答案:

答案 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()