第二種方法提供的可能性微乎其微(假設您沒有大量的div.ok
元素掉入DOM),因爲DOM不需要再次搜索。另一種選擇是使用html/props
簽名:
$("<div>", {
'class': "ok",
'click': function() {
alert("You clicked the new element!");
}
}).appendTo("body");
演示:http://jsfiddle.net/w4Tj3/
記住.live()
已被棄用。如果您要使用活動委派,最好從現在開始使用.on()
。然而,就你而言,你並不一定需要。取而代之的是,以模仿.live()
你建立一個監聽器上document
:
$(document).on("click", ".ok", function() {
alert("You clicked an .ok element!");
});
這種工作方式是通過利用事件冒泡行爲。當你點擊一個元素時,點擊遍歷DOM直到它最終到達document
對象。然後jQuery檢查發起點擊的元素是否與我們的選擇器(.ok
)相匹配,並且它是否會運行匿名函數。
爲了獲得更好的性能,請不要綁定到document
,而要綁定到更接近動態添加元素的位置。例如,如果您動態添加li
元素,請綁定到其父項ol
或ul
。這樣,事件在處理之前不需要傳播太多。
有了事件委託,你可以從動態添加div
本身刪除click
邏輯:
$("<div>", {'class': 'ok'}).appendTo("body");
你也知道'.live()'已被棄用,對吧? – Daedalus
是的,我知道。我們可以假設使用.on() – user1392191
@ user1392191:如果提供的任何響應已將您的問號中的一個回答爲接受。但是,如果您仍然遇到此問題,請告訴我們。 – Nope