我的jQuery.live()事件赢了';t.die()

我的jQuery.live()事件赢了';t.die(),jquery,Jquery,使用jQuery 1.4.3 我有一些显示在模式窗口中的内容。当模态打开时,我使用.live()将处理程序附加到几个元素。当模态关闭时,我使用.die()来分离它们。但是,.die()似乎不起作用,因为当我重新打开modal时,与.live()连接的所有处理程序都会触发两次。如果我再次关闭并重新打开模态,所有处理程序都会触发三次,以此类推。为什么.die()不分离单击事件?代码如下: $('.app-action-edit').live('click', function(){ [so

使用jQuery 1.4.3

我有一些显示在模式窗口中的内容。当模态打开时,我使用.live()将处理程序附加到几个元素。当模态关闭时,我使用.die()来分离它们。但是,.die()似乎不起作用,因为当我重新打开modal时,与.live()连接的所有处理程序都会触发两次。如果我再次关闭并重新打开模态,所有处理程序都会触发三次,以此类推。为什么.die()不分离单击事件?代码如下:

$('.app-action-edit').live('click', function(){

    [some code]

});

$('.app-action-cancel').live('click', function(){

    [some code]

});

$('.app-action-save').live('click', function(){

    [some code]

});

$('.close-modal').click(function(){

    $('.app-action-edit').die('click');
    $('.app-action-cancel').die('click');
    $('.app-action-save').die('click');

    closeModal();

});
这行吗

function f1 {
   [some code]
}

function f2 {
   [some code]
}

function f3 {
   [some code]
}

$('.app-action-edit').live('click',f1);
$('.app-action-cancel').live('click',f2);
$('.app-action-save').live('click', f3);

$('.close-modal').click(function(){

    $('.app-action-edit').die('click',f1);
    $('.app-action-cancel').die('click',f2);
    $('.app-action-save').die('click',f3);

    closeModal();

});

您是否100%确定正在调用“.close modal”上的单击处理程序?你有没有在死亡召唤后发出警报以确保你通过了它们?这可能是模态正在以另一种方式关闭,绕过你的死代码。这很尴尬,但你明白了。die()代码甚至从未执行过。真不敢相信我错过了。我们都经历过:-)有一个类似的问题,尽管die()肯定是可执行的,但Git没有。live()仍在堆叠。我知道您的代码就是一个例子——您是否100%确定选择器完全相同。正如文档页面所说:“在jQuery 1.4.4之前,为了使.die()能够正确运行,与它一起使用的选择器必须与最初与.live()一起使用的选择器完全匹配。”@Hogan:这包括=>向选择器添加live('click')。使用该选择器时找到的html将被刷新(替换div中的html)。die()是否仍然适用于新的html?@abepterillo——正如我从源代码中记得的那样,它应该不会存储在元素中,而是存储在jQuery对象中,在需要时在该对象中进行检查,键是选择器,jQuery将其用作实时事件数据的键(在本例中是函数字典)霍根:非常感谢。和询问者一样,我发现这最终是其他地方的另一个bug。感谢您的反馈:)