2016-06-07 45 views
1
<ul> 
<li>A</li> 
</ul> 

$("li").click(function(){ 
    console.log("Hello"); 
}); 

$("ul").on("click", "li", function(){ 
    console.log("Hello"); 
}); 

$("ul").append('<li>B</li>'); 

大家好, 當我按下「A」,我在控制檯2「你好」 -logs,當我按「B」,這只是一個「你好」,來自UL事件處理程序。事件處理不起作用

有人可以解釋這種行爲嗎?

謝謝。

+0

[將事件附加到使用jQuery的未來元素]可能的重複(http://stackoverflow.com/questions/21522499/attaching-event-to-future-elements-using-jquery) – edhurtig

回答

0

這是因爲你追加,因爲它沒有在DOM存在你這麼做的時候沒有得到重視它的onclick事件處理程序在B <li>

$("li").click(function(){ 
    console.log("Hello"); 
}); 

你需要註冊一個onclick事件用B li單獨像這樣的東西(抱歉,這是一個非常貧窮的例子)處理:

$b = $('<li/>') 
$b.text('B') 
$b.click(function(){ console.log("Hello"); }) 
$("ul").append($b); 
0

對「禮」的標籤第一次單擊事件處理工作在一個預期,因爲A存在時的處理程序被創建。它在B上不起作用,因爲在創建處理程序時B不存在。

「ul」標籤上的第二個單擊事件處理程序也通過它的父級捕獲對A的單擊。此外,它還能夠捕獲B上的點擊,因爲「on」方法可以跟蹤您在參數中指定的動態子項。