2012-12-06 42 views
2

我在我的網站上動態生成按鈕。要檢測這些元素的click狀態,我相信你需要使用jQuery的on()。我嘗試了以下,但它似乎並沒有工作。難道我做錯了什麼?jQuery on()不工作

$('.press').on('click', function() { 
    alert('clicked'); //Does not trigger on dynamic elements 
}); 

當您查看我的JSFiddle,注意點擊動態生成的按鈕不產生結果。

回答

8

當你要委託事件處理,選擇安裝在將包含動態元素(全部達到document方式)的元素,以及.on第二個參數是選擇:see documentation

$(document).on('click', '.press', function() { ... 

我建議在使用委派時儘可能使用特定的選擇器,這樣需要進行最少量的遍歷。不過,它通常並沒有太大的區別。

+0

謝謝你的解釋。我現在明白了:) – Jon

2

代表事件

$('body').on('click','.press', function() { 
    alert('clicked'); // now it triggers on dynamic elements 
}); 

您可以用static parent container更換閥體..

你的方法不會作爲元素工作仍在not available in the DOM當附加事件。

Check Fiddle

+0

感謝您的解釋。我現在明白了:) – Jon

2

應該

$(document).on('click', ".press", function() { 
    alert('clicked'); 
}); 

$('.press')目前發現的所有元素在文檔中,並結合對他們的事件,所以它不會在要素的工作,你後來因爲添加他們在當時不存在被選中。

$(document)選擇document,它始終存在於任何地方,並將事件綁定到它。然後過濾.press,以便只有匹配.press的元素纔會實際調用回調。

請注意,您應該選擇一個父元素,該元素是.press元素的公共父元素,並且此時存在,而不是使用document

+0

謝謝你的解釋。我現在明白了:) – Jon

3

對於動態生成的元素,您需要使用事件委派。 .on()需要應用於父元素來執行委派

+0

謝謝你的解釋。我現在知道了 :) – Jon