Javascript 事件链接如何适用于多个对象?

Javascript 事件链接如何适用于多个对象?,javascript,jquery,twitter-bootstrap,jquery-events,Javascript,Jquery,Twitter Bootstrap,Jquery Events,当用户单击twitter引导模式窗口按钮上的确认按钮时,我正在对页面执行删除操作 我有两个按钮:一个允许用户取消操作,另一个用于确认 当用户单击确认删除按钮时,当模式隐藏时,我执行我的操作,例如,我可以显示动画并实际删除项目 如果用户单击了几个项目,但他/她选择的是“取消”按钮,则当他/她单击他/她要删除的项目时,也会对要取消选择的元素执行删除 执行“隐藏”事件后,是否应将其与元素分离 我知道我可以分离事件链接,更改$('confirmDeleteModal')。打开('hidden',func

当用户单击twitter引导模式窗口按钮上的确认按钮时,我正在对页面执行删除操作

我有两个按钮:一个允许用户取消操作,另一个用于确认

当用户单击确认删除按钮时,当模式隐藏时,我执行我的操作,例如,我可以显示动画并实际删除项目

如果用户单击了几个项目,但他/她选择的是“取消”按钮,则当他/她单击他/她要删除的项目时,也会对要取消选择的元素执行删除

执行“隐藏”事件后,是否应将其与元素分离

我知道我可以分离事件链接,更改
$('confirmDeleteModal')。打开('hidden',function(){
$('confirmDeleteModal')。关闭('hidden')。打开('hidden',function(){
),但我真的会理解为什么会发生这种情况。我遗漏了什么吗

代码是:

$(document).ready(function(){
    $('.delete').on('click', function() {
        var itemID = $(this).data('product-id')

        $('#confirmDeleteModal').modal('show');

        $('#confirmDelete').on('click', function() {

            $('#confirmDeleteModal').on('hidden', function() {
                // Here I do my stuff to perform deletion
                $('#result').append('This method has been called for ' + itemID + ' <br />' )
            });
        });
    });
});
$(文档).ready(函数(){
$('.delete')。在('click',function()上{
var itemID=$(this.data('product-id'))
$('confirmDeleteModal').modal('show');
$('confirmDelete')。在('click',function()上{
$('confirmDeleteModal')。on('hidden',function(){
//在这里,我做我的东西来执行删除
$(“#result”).append(“+itemID+”
调用了此方法) }); }); }); });

我希望我已经清楚地暴露了我的问题。我还准备了一个JS Bin:

这里的问题是,您每次都在
单击
隐藏的
事件中附加其他侦听器。要解决这个问题,请在调用
打开('eventName')之前,将jQuery
.off('eventName')
方法链接起来
请再说一遍

以下是您在JS Bin中更新并运行良好的代码:

$(document).ready(function(){
    $('.delete').on('click', function() {
        var itemID = $(this).data('product-id')

        $('#confirmDeleteModal').modal('show');

        $('#confirmDeleteModal').off('hidden'); // must reset from previous
        $('#confirmDelete').off('click').on('click', function() {

            $('#confirmDeleteModal').on('hidden', function() {

                    // Here I do my stuff to perform deletion
                    $('#result').append('This method has been called for ' + itemID + ' <br />' )
            });
        });
    });
});
$(文档).ready(函数(){
$('.delete')。在('click',function()上{
var itemID=$(this.data('product-id'))
$('confirmDeleteModal').modal('show');
$('confirmDeleteModal').off('hidden');//必须从上一个
$('confirmDelete')。关闭('click')。打开('click',函数(){
$('confirmDeleteModal')。on('hidden',function(){
//在这里,我做我的东西来执行删除
$(“#result”).append(“+itemID+”
调用了此方法) }); }); }); });

编辑:我将
$('confirmDeleteModal').off('hidden')移动
单击事件上方,以便重置是否单击了确认。

不确定您在问什么,但是的,您应该分离事件,或者至少不要像那样嵌套事件附件。我想知道为什么会发生这种情况:一旦“隐藏”事件完成,为什么会再次触发?既然您说我应该我不会那样嵌套事件,有更好的方法吗?我已经尝试过了,但看起来似乎不起作用。我仍然会有同样的行为。我想这是因为当你分离
隐藏的
事件时,事件本身还没有排队。嗯……看看我做的。这不是你想要的吗?我明白了……我错过了关闭(‘单击’)按钮本身。这也很奇怪……因为我只按了一次按钮,它怎么会附加其他事件?当对话框窗口关闭时,它实际上不会删除对话框或按钮;它只是隐藏它们。因此,当你附加另一个事件句柄时,你将它附加到同一个按钮上。很高兴它工作了!