2011-05-27 95 views
0

死方法我有个“问题”与.live()和.die()方法。 我正在使用jQuery 1.5.1。 这里是我的方案jQuery的.live()由类选择方法和通过id选择

<div id='div1' class='MyClass'>Link 1</div> 
<div id='div2' class='MyClass'>Link 2</div> 
<div id='div3' class='MyClass'>Link 3</div> 

和我的jQuery脚本

$('.MyClass').live('click', function(evt) { 
    local.href = 'home.aspx' 
}); 

由于某种原因,我想禁用链接2所以我试图做到这一点

$('#div2').die('click'); 

,但它不似乎没有问题。 我认为,如果我使用类选择器添加事件,我不能使用id选择器删除相同的事件。 我必须使用.live()方法,因为我不知道我的页面中有多少div。

任何人有任何建议,以“解决”这个问题?

+0

有不知道你有多少的div有一个页面上,并动态地添加的div * *后的页面加载之间的差异。现场只在后一种情况下需要。对于前一种情况,'.bind('click')'可以正常工作。至于生活在类选择器上,死在ID选择器上,应该可以正常工作。 “不工作”是什么意思?如果你可以更具体,我们可以提供帮助。为了以防万一,请在您的选择器中尝试'div.MyClass'。 – Milimetric 2011-05-27 16:23:07

+2

**先阅读文档[here](http://api.jquery.com/die/):** *“注意:为使.die()正常工作,与其一起使用的选择器必须完全匹配该选择器最初与.live()一起使用。“* – 2011-05-27 16:23:24

+1

@Faber从该特定DIV中除去”MyClass“类将自动解决该问题。这对你有用吗? – 2011-05-27 16:26:49

回答

3

所有你需要做的是从DIV2删除类“MyClass的”。然后它不会匹配活动绑定的选择器。

Here's an example

0

别的尝试:

$('.mySelector').unbind('click'); 
+1

'unbind()'不适用于'live()'... – 2011-05-27 16:38:00

0

一个 “修复” 的解决办法是这样的:

$('.MyClass').live('click', function(evt) { 
    if ($(this).data('disabled')) { return false; } // return if disabled 
    // do your stuff 
}); 

然后,当你想关闭一个DIV,这样做:

$('#div2').data('disabled', true); 

现在,活动处理程序仍会执行,但会立即返回。

你甚至可以后来由上述数据属性设置为true重新启用它。