2011-09-09 27 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工作