2012-01-23 38 views
0

事件分配樣式之間的區別是什麼? 例如:

$("button","#container").click(function(){ 
    console.log("Usage 1"); 
}); 

$("#container").click("button",function(){ 
    console.log("Usage 2"); 
}); 

$("#container button").click(function(){ 
    console.log("Usage 3"); 
}); 

$(document).click("#container button",function(){ 
    console.log("Usage 4"); 
}); 

http://jsfiddle.net/mesuutt/8Dkcc/2/

+3

請參閱:[比較$(「#foo。 bar「)和$(」。bar「,」#foo「)](http://stackoverflow.com/questions/8598759/comparing-the-performance-of-foo-bar-and-bar-foo) –

+0

你在這裏有答案http://stackoverflow.com/questions/8598759/comparing-the-performance-of-foo-bar-and-bar-foo 正如Vidas說的。 – Ravia

+1

我很驚訝,陳述2和4的工作。 API沒有提到將選擇器傳遞給'click()'... –

回答

1
$("button","#container").click(function(){ 
    console.log("Usage 1"); 
}); 

這將尋找button元素內#container並在每個找到的button元素的附加click事件處理程序。

$("#container").click("button",function(){ 
    console.log("Usage 2"); 
}); 

這將附上#containerclick事件處理程序,並通過「按鈕」字符串作爲事件數據click事件處理程序。

$("#container button").click(function(){ 
    console.log("Usage 3"); 
}); 

這將與您的第一個代碼段相同。

$(document).click("#container button",function(){ 
    console.log("Usage 4"); 
}); 

這將附着在整個documentclick事件處理程序,並通過「#container的按鈕」字符串作爲事件數據click事件處理程序。

0

語句2和4沒有被jQuery文檔指定,所以我們可以忘掉它們。至於語句1和3,它們將點擊處理程序綁定到單個按鈕 - 它們都實現相同的功能。

我的建議是利用事件代表團:

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

其中container是對#container元素的引用。 (您希望在頁面加載時獲得對靜態元素的引用,以便您不必在每次需要時都查詢它們。)

相關問題