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