类选择器的jQuery.live()方法和id选择器的die方法

类选择器的jQuery.live()方法和id选择器的die方法,jquery,Jquery,我对.live()和.die()方法有一个“问题”。 我正在使用jquery1.5.1。 这是我的设想 <div id='div1' class='MyClass'>Link 1</div> <div id='div2' class='MyClass'>Link 2</div> <div id='div3' class='MyClass'>Link 3</div> 出于某种原因,我想禁用链接2,所以我尝试过这样做 $('#

我对.live()和.die()方法有一个“问题”。 我正在使用jquery1.5.1。 这是我的设想

<div id='div1' class='MyClass'>Link 1</div>
<div id='div2' class='MyClass'>Link 2</div>
<div id='div3' class='MyClass'>Link 3</div>
出于某种原因,我想禁用链接2,所以我尝试过这样做

$('#div2').die('click');
但它似乎不起作用。 我认为,如果使用类选择器添加事件,则无法使用id选择器删除相同的事件。 我必须使用.live()方法,因为我不知道我的页面中有多少div


有人对“修复”这个问题有什么建议吗?

您只需从div2中删除类“MyClass”。那么它将与活动绑定的选择器不匹配


您只需从div2中删除类“MyClass”。那么它将与活动绑定的选择器不匹配

还可以尝试其他方法:

$('.mySelector').unbind('click');
还可以尝试其他方法:

$('.mySelector').unbind('click');
一个“修补程序”解决方案是:

$('.MyClass').live('click', function(evt) {
    if ( $(this).data('disabled') ) { return false; } // return if disabled
    // do your stuff
});
然后,如果要禁用DIV,请执行以下操作:

$('#div2').data('disabled', true);
现在,live处理程序仍将执行,但它将立即返回

您甚至可以稍后通过将上述数据属性设置为
true

来重新启用它。一个“修补程序”解决方案是:

$('.MyClass').live('click', function(evt) {
    if ( $(this).data('disabled') ) { return false; } // return if disabled
    // do your stuff
});
然后,如果要禁用DIV,请执行以下操作:

$('#div2').data('disabled', true);
现在,live处理程序仍将执行,但它将立即返回


您甚至可以稍后通过将上述数据属性设置为
true

来重新启用它。不知道页面上有多少个div与在页面加载后动态添加div是有区别的。只有在后一种情况下才需要Live。对于前一种情况,
.bind('click')
可以正常工作。对于类选择器上的live和id选择器上的die,这应该可以很好地工作。你说的“不工作”是什么意思?如果你能说得更具体些,我们可以帮忙。请在选择器中尝试“div.MyClass”,以防万一。请先阅读文档:“注意:为了使.die()正常工作,与它一起使用的选择器必须与最初与.live()一起使用的选择器完全匹配。”@Faber从特定的div中删除
MyClass
类将自动解决此问题。这对你来说可行吗?@Milimetric OP使用了将来时态-他说他不知道页面上会有多少DIV。这意味着动态添加了更多的DIV,这使后一种情况成为可能。@Milimetric我不知道在我的页面中会找到多少DIV。我动态添加div,因此需要使用.live()。不知道页面上有多少div和在页面加载后动态添加div是有区别的。只有在后一种情况下才需要Live。对于前一种情况,
.bind('click')
可以正常工作。对于类选择器上的live和id选择器上的die,这应该可以很好地工作。你说的“不工作”是什么意思?如果你能说得更具体些,我们可以帮忙。请在选择器中尝试“div.MyClass”,以防万一。请先阅读文档:“注意:为了使.die()正常工作,与它一起使用的选择器必须与最初与.live()一起使用的选择器完全匹配。”@Faber从特定的div中删除
MyClass
类将自动解决此问题。这对你来说可行吗?@Milimetric OP使用了将来时态-他说他不知道页面上会有多少DIV。这意味着动态添加了更多的DIV,这使后一种情况成为可能。@Milimetric我不知道在我的页面中会找到多少DIV。我动态添加div,因此需要使用.live()