单击一下即可生成多个ajax调用

时间:2013-08-25 02:26:34

标签: javascript ajax jquery

一种奇怪的现象发生在我身上..

我有一个项目列表,每个项目都有删除按钮来删除该文章,这是一个例子: http://jsfiddle.net/lughino/8HYeQ/5/

$('.delete').on('click', function(e) {
    e.preventDefault();
    var $li = $(this).parents('li'),
        $url = $(this).attr('href');
    $('#delete_confirm').modal('show');
    $('#delete_confirm').find('button.btn-danger').click(function() {
        $.post($url, function(result) {
            $('#delete_confirm').modal('hide');
            $li.remove();
        });
    });
});

很遗憾,此示例无法重现此问题!

当我删除id为1的第一篇文章时,执行ajax调用。

当我删除第二个产品时,id为2,运行ajax调用,第1个执行第1条,这样做是成功的,因为当然已经删除了,第一个是第二篇文章。

如果我在执行3次ajax调用时删除其他内容,依此类推......

在内存中维护,好像旧的id ...你能解决这个奇怪的行为吗?

从什么到期?

1 个答案:

答案 0 :(得分:3)

这是因为您在删除按钮单击处理程序中注册了确认回调处理程序。因此,当您第一次单击删除按钮时,处理程序已注册一次 - 因此ajax请求将被发送一次。当您第二次单击删除按钮时,会再注册一个确认处理程序,现在我们已经注册了两个确认处理程序。

应该是

$('.delete').on('click', function(e) {
    e.preventDefault();
    var $li = $(this).parents('li'),
        $url = $(this).attr('href');
    $('#delete_confirm').modal('show');
});

$('#delete_confirm').find('button.btn-danger').click(function() {
    $.post($url, function(result) {
        $('#delete_confirm').modal('hide');
        $li.remove();
    });
});