2012-08-02 33 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瞭解更多有關不同可用綁定方法的細節,以及何時和取而代之以及爲什麼會引入這些方法。

一些更多的資源: