2011-09-09 55 views
1

我在開始時有一個空列表,像這樣。追加jquery手機後獲取子女?

<ul id="list" data-role="listview" data-inset="true"> 
      </ul> 

在文件準備功能,我調用多個

$('#list').append('<li id="a">A</li>').listview('refresh'); 

對於具有自己獨特的ID的UL認證。所以結果應該是這樣的:

<ul id="list" data-role="listview" data-inset="true"> 
     <li id="a">A</li> 
     <li id="b">B</li> 
</ul> 

但在HTML body標籤的結束,當我嘗試做一些像

$('#list').children() 

它出來作爲空集[]。 同樣,當我附加一個像$("#a").click(function{alert("A")})這樣的點擊事件時,它根本不起作用,因爲它不會識別#a,因爲它可能是動態創建的呢?

我希望有人可以幫助我瞭解正在發生的事情,如果有解決方法。

+1

你需要把裏面的文件準備好事件附加代碼。 –

回答

1

您需要使用jquery live函數將事件綁定到dyanamicaly添加的數據。試試這個。

$("#a").live('click',function(){ 
alert("A"); 
}); 
0

不知道.children的東西。聽起來怪怪的。

點擊事件是因爲項目是動態創建的。

所以爲了解決這個問題,請爲每個項目添加一個類。

<li id="a" class="ListItem">A</li> 

然後,您可以使用each關鍵字來遍歷列表。

至於點擊事件,請使用live關鍵字。

$(".ListItem").live("click", function() { your code here }) 
0

當使用jQuery手機時,您不能像通常那樣使用文檔就緒處理程序。由於頁面帶有Ajax,文檔就緒處理程序僅被觸發一次(無論用戶首先登陸哪個頁面)。您應該綁定到pagecreateevents)事件。

另外,和其他人一樣,您需要使用live來處理動態添加內容的點擊事件。

0

你可以這樣做:

<script type="text/javascript" src="jquery-1.6.3.min.js"></script> 
<script> 
$(document).ready(function(){ 
    $('#list').append('<li id="a">A</li>') 
    .append('<li id="b">B</li>') 
    .append('<li id="c">C</li>'); 
}); 
</script> 
<ul id="list" data-role="listview" data-inset="true"></ul> 
<script> 
setTimeout(function(){ 
    $('#list').children("li").each(function(){ 
     alert($(this).attr("id")); 
    }); 
},100); 
</script> 

它是什麼使得它的setTimeout工作