修改/更新: 好的,所以我觉得现在有点羞怯。经过将近两天的时间盘旋这个问题后,我找到了一个非常接近发布的解决方案。
简而言之,点击检测$('#someListView li').click(function() {
需要移出pageinit
事件,并在生成列表项后置于pagebeforeshow
事件中。这似乎解决了这个问题,虽然我必须承认我不太清楚为什么......
此外,不需要.trigger("create")
。我希望它有所帮助。
=============================================== ==
原始查询:
我有一个小问题,我设法归结为下面的问题。基本上我想从动态生成的attr
列表项中获取数据值listview
。听起来很简单。硬编码数据工作正常,我可以访问data-id
属性,但是一旦我动态生成它,无论刷新或重新创建父项,点击事件似乎都不起作用。 html已被更改,因为我可以在检查元素时看到值。样式似乎没问题。
我在这里看到了很多关于重新创建对象和刷新列表的例子,但似乎都没有。
如果我注释掉javascript
以生成列表项,则硬编码项可以正常工作。
我想我错过了一些非常简单的东西,但我无法理解它可能是什么。
HTML:
<div data-role="page" id="testpage" data-theme="c">
<div data-role="content" id="testpage_content" data-theme="c">
<div id="listview_container">
<ul data-role="listview" id="someListView">
<li data-id="4444">
<a href="#"><p>hard-coded data-id=4444</p></a>
</li>
<li data-id="5555">
<a href="#"><p>hard-coded data-id=5555</p></a>
</li>
</ul>
</div>
</div>
</div>
jquery的:
$(document).on('pageinit','#testpage',function(){
$('#someListView li').click(function() {
alert($(this).attr('data-id'));
});
});
$(document).on('pagebeforeshow','#testpage',function(){
var arrayData = new Array("4444","5555"); //usually generate this data from ajax call
$("#someListView").empty(); //empty hard-coded list items
$.each(arrayData, function(key, value){
$("#someListView").append(
'<li data-id="'+ value +'">'+'
<a href="#"><p>clicking this should alert: '+ value +'</p></a>'+
'</li>'
);
$('#someListView').listview('refresh');
});
$('#listview_container').trigger('create');
});