即使按下取消按钮(ajax),代码也会执行

时间:2014-08-12 03:00:18

标签: javascript jquery ajax

好的,我有一个功能"停用"它将3个参数传递给它。

<a href="#myModal" onclick="deactivate('{{ $user->getRoleName() }}', '{{ $user->getFullName() }}', {{ $user->id }}); return false;" role="button" data-toggle="modal" class="btn btn-danger btn-small delete">
<i class="btn-icon-only"></i>
Deactivate User
</a>

这是我的功能:

function deactivate(title, name, id) {
    $('#modal-user-role').html(title);
    $('#modal-user').html(name);
    $('#confirm').click(function() {
       $.ajax({
          url: '/user/' + id + '/',
          type: 'PUT',
          success: function (data) {
             $('#alerts').html('<p class="alert alert-success">Successfully deactivated ' + title + ': ' + name + '</p>' + $('#alerts').html());
             $('#r' + id).hide();
          },
          error: function (jqXHR, textStatus, errorThrown) {
             $('#alerts').html('<p class="alert alert-error">A problem occured while deactivating ' + title + ': ' + name + '</p>' + $('#alerts').html());
             $('#r' + id).hide();
          }
       });
    });
}

这是我的HTML功能:

<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close icon-remove" data-dismiss="modal" aria-hidden="true"></button>
        <h3 id="myModalLabel">Deactivate User</h3>
    </div>
    <div class="modal-body">
        <p>Are you sure you want to deactivate user <span id="modal-user-role"></span>: <span id="modal-user"></span>?</p>
        <p>This action cannot be undone.</p>
    </div>
    <div class="modal-footer">
        <button type="button" class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
        <button id="confirm" data-dismiss="modal" class="btn btn-danger">Confirm Deactivation</button>
    </div>
</div>

有谁知道为什么我的取消按钮不起作用?我相信它与我正在使用的onclick有关,但不太确定如何解决它。

因此,基本上,如果我单击取消激活用户按钮而不是取消并单击另一个用户然后取消然后单击另一个用户,并确认取消激活它将从数据库中删除每个用户。 我不想要的。

我有按钮类型=&#34;按钮&#34;我认为会修复它。但事实并非如此。

任何想法都会受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,问题是你如何注册点击处理程序......

因为click处理程序是在deactivate方法中注册的,所以每次调用该方法时都会添加一个新的处理程序 - 它不会删除以前添加的处理程序...

因此您可以尝试使用.off()

删除处理程序
$('#confirm').off('click.deactivate').on('click.deactivate', function () {
})

注意:使用事件解除绑定时,我更喜欢使用name spacing