2014-02-13 91 views
-4

案例1被點擊檢測其中的列表元素:列表存在使用使用jQuery(動態添加列表)

$('#list1 li').bind('click', function(){ 
    alert($(this).html()); 
}); 

以上工作正常,已

<ul id="list1"> 
    <li>One</li> 
    <li>Two</li> 
</ul> 

檢測的點擊li元素的HTML 。

案例2:使用相同的代碼

$('#list1 li').bind('click', function(){ 
    alert($(this).html()); 
}); 

在這種情況下

現在如果dyamically添加

<div id="testDiv"> 
</div> 

var output = '<ul id="list1">' + 
      '<li>One</li>' + 
      '<li>Two</li>' + 
      '</ul>'; 

$('#testDiv').html(output); 

我試圖偵測點擊li元素列表,它不檢測

+0

你在頁面中添加了jQuery嗎?你把這個腳本放在一個dom準備好的處理程序中了嗎?瀏覽器控制檯中是否有錯誤? –

+1

選項1是正確的方法。 – Barmar

+0

選項1應該工作正常http://jsfiddle.net/arunpjohny/T6CVD/1/ –

回答

4

假設 th您已經正確加載了jQuery,並且您將與jQuery相關的代碼放入了一個"document ready"處理程序中,我建議使用「事件代理」,以便您只在靜態祖先元素上註冊單個事件處理程序。在li後裔收到

點擊會「冒泡」的祖先元素,但jQuery將確保this被設置爲實際點擊的元素:

$('#testDiv').on('click', 'li', function() { 
    console.log(this); 
}); 

只要靜態祖先遺骸出現在頁面上,您可以根據自己的喜好動態更改其內容,並且事件處理程序將繼續工作。