2012-08-02 32 views
1

我发现了很多关于这个主题的例子..但是,我不完全理解。我的逻辑看起来是否正确?我有一个div的按钮(类.myClass的),我不希望它点击除非mycount的> = 1JQuery Unbind然后绑定

// I want to unbind if myCount == 0 
if (myCount == 0) { 
$('.myClass').unbind().css("opacity","0.5"); 
} else { 
// **would this rebind?** 
$('.myClass').click(callMyFunction); 
} 
+0

你想实现什么? – 2012-08-02 19:16:46

+1

我不会称之为'重新绑定'。这更像是你附加了另一个事件处理程序。如果它已经有事件,点击它会调用该功能两次。 – kei 2012-08-02 19:18:26

+0

你是对的。我会改变这一点。 – user1040259 2012-08-02 19:19:40

回答

2

你可以使用命名空间的事件,on()bind()已被弃用。

var foo = function() { ... } 

if (myCount) 
    $('.myclass').on('click.foo', foo) 
else 
    $('.myclass').off('.foo') 
+1

不错的一个。在'off()'上注意'.foo'。我认为这将解除与命名空间相关的所有事件。除非你想解除所有的关系,否则最好使用'$('。myclass')。off('click.foo')'。 – Nope 2012-08-02 19:41:20

2

我不知道你想实现什么,但.unbind()移除了当没有参数调用时,附加到元素的所有处理程序。因此,$('.myClass').unbind()会删除所有附加到类别为.myClass的元素的事件处理程序。由于您似乎只添加了一个事件处理程序click,因此最好仅解除绑定处理程序,如下所示:$('.myClass').unbind('click')。这样,如果您以后再添加其他事件,您不会为其他事件被解除绑定而感到困惑。

2

click(callMyFunction).bind("click", callMyFunction).on("click", callMyFunction)的简写。

绑定使用on()解除绑定使用off()。这些是自jQuery 1.7以来的首选方法。如果您使用的是旧版本使用bind()unbind(),或者delegate()undelegate()

$('.myClass').off('click') 

,并结合

$('.myClass').on('click', function(){}); 

正如在另一篇文章中所提到的,使用名称空间是分类您的事件,例如额外的途径例如click.mynamespace

请参阅this post了解更多有关不同可用绑定方法的细节,以及何时和取而代之以及为什么会引入这些方法。

一些更多的资源: