2013-08-27 67 views
0

我發現了一個代碼,如下所示。解綁後使用綁定

HTML代碼:

<div id="myButton">Click Here</div> 

jQuery代碼:

$("#myButton").unbind("click").bind("click",function(){ 
    alert("Working") 
}); 

什麼是需要的解除綁定元素結合之前( 「點擊」)

如果不使用解除綁定,它也可以工作。如下所示

$("#myButton").bind("click",function(){ 
    alert("Working") 
}); 

哪一個最好?有什麼不同?

+0

請參閱:http://stackoverflow.com/questions/1264353/what-does-bind-and-unbind-mean-in-jquery –

+0

從jQuery1.7開始['on()'](http://建議使用api.jquery.com/bind/)。你的代碼將是'$(「#myButton」)。關閉()。在()'。 – bhb

回答

1

這隻能確保沒有其他click事件監聽器附加。因此,您的處理程序將成爲唯一一個點擊#myButton

作用的處理程序,編輯: as @ T.J。 Crowder在評論中指出,unbind()不會影響以不同方式連接的處理程序,而不會調用bind()

這也是值得注意的,即:

如jQuery的1.7,則。對()和.off的()方法是優選的附加和上元件移除事件處理程序

(摘自jQuery.unbind() doc)。實際上,unbind()is implemented internallyoff()方法)。

考慮:

$("#myButton").bind('click', function() { 
    console.log('click 1'); 
}); 

$("#myButton").unbind('click').bind('click', function() { 
    console.log('click 2'); 
}); 

// When clicked, prints "click 2" 

對戰:

$("#myButton").bind('click', function() { 
    console.log('click 1'); 
}); 

// note: no unbind here 
$("#myButton").bind('click', function() { 
    console.log('click 2'); 
}); 

// When clicked, prints "clicked 1" followed by "clicked 2" 
+0

值得注意的是,這隻會解除綁定* jQuery *的處理程序。它不會解除與'onclick'屬性,'onclick'屬性或'addEventListener'附加的屬性。它也不會影響與按鈕匹配的委託處理程序。 –

0

由元素,你實際上是刪除所有與該元素相關的onclick事件的解除綁定 「click」 事件。即如果您的html表單的輸入字段有一個onclick事件並且它調用了一個函數,它將被解除綁定。解除綁定後,您將綁定另一個單擊事件,該事件將調用該元素的onclick函數。

0

如果沒有這個HTML代碼的URL,我不知道該#myButton元素是否有其他click處理器連接,但可以肯定的是unbind方法刪除此元素上的所有的處理程序,我覺得作者只想觸發一個點擊事件。 另外,您可以看到瀏覽器的調試檢查器上是否有其他事件處理程序。 希望這會幫助你。