2012-03-29 68 views
4

我試圖將我所有的.live()更改爲.on(),因爲之前的版本已被棄用。Jquery正在改變.live to .on,

我很努力去理解它是如何工作的。以前我用這個代碼,它工作得很好......

$('#lightBoxClose').live('click', function() { 
    $('#lightBox').fadeOut(); 
}); 

所以我試圖將其更改爲,

$('#lightBoxClose').on('click', function() { 
    $('#lightBox').fadeOut(); 
}); 

但它不起作用任何人都可以請解釋什麼,我應該做的謝謝。

+1

可能重複:http://stackoverflow.com/questions/8042576/whats-the-difference-between-jquery-live-and-on – 2012-03-29 22:27:23

+0

見例如在http://api.jquery.com/on/ – 2012-03-29 22:35:25

回答

9

你必須綁定到已存在於結合的時間的元素,使所述目標選擇作爲第二個參數。該元素必須是最終點擊目標的祖先,因此它可以捕捉冒泡事件。這種技術被稱爲委派。

例如,使用document元件:

$(document).on('click', '#lightBoxClose', function() { 
    $('#lightBox').fadeOut(); 
}); 
+2

的底部真的嗎?那太令人失望了。爲什麼它不是默認綁定到窗口? – Anthony 2012-03-30 04:05:24

+0

@Anthony,因爲'.on()'不會替換'.live()',它現在是綁定所有事件的標準方式。所以它不能通過假設你總是想綁定到'document'來強制委派。 (注意:由於DOM事件無法到達窗口對象,因此無法綁定到該窗口對象) – bfavaretto 2012-03-30 04:13:06

+0

@ bfavaretto:如果是這種情況,如果附加到'.click()',綁定速記功能將起作用現有的元素?像'$(document)。$('。my_controllers')。click(「blah」)'?對於a),如果每個人都要使用'document',如果它對於特定的面板不是至關重要的,並且b)必須丟失使得jquery更容易的事件特定速記方法,則它必須事先建立一個父項看和寫。似乎它正在擺脫我所認同的懶惰和薄弱的方式。 – Anthony 2012-03-30 04:34:30