我在jquery mobile中遇到listview的问题。我想使用JSON从服务器加载一些数据,并用项目填充listview。这很好。但是当我试图对点击新装载的物品做出反应时,我会做网络活动!我想我必须以某种方式刷新视图,有点不知道如何。
我在http://jsfiddle.net/VqULm/227/
上画了一个小草图当您点击“我点击”按钮时,不会再跟踪项目上的点击事件。如何在新项目上获得“Wokrs”警报?
非常感谢你的阅读!
答案 0 :(得分:19)
尝试
$('#listview').on('click', 'li', function() {
alert("Works"); // id of clicked li by directly accessing DOMElement property
});
jQuery > 1.7
<强> DEMO 强>
或强>
$('#listview li').live('click', function() {
alert("Works"); // id of clicked li by directly accessing DOMElement property
});
使用您的jQuery版本1.6.4。
<强> DEMO 强>
由于。您在页面重新加载后在li
内添加了listview
,因此li
的所有事件都应live
(对于您使用的jQuery版本)或delegate
( jQuery&gt; 1.7)。
答案 1 :(得分:3)
如果您的JQM版本旧(如mine-jqm 1.2.0), 并且两种提到的方法都不适合你
试试这个:
<ul data-role="listview" id="myList">
<li id="1" >text</li>
</ul>
//on the js code use delegate
$('#myList').delegate('li', 'click', function () {
alert($(this).attr('id'));
});
答案 2 :(得分:2)
远程数据源和liswiew
用div
包装ul元素<div data-role="page" id="myPage">
<form id="myform" class="ui-filterable">
<input id="what" data-type="search" placeholder="i.e.Carpentry...">
<div id="w_what">
<ul id="ul_what" data-role="listview" data-inset="true" data-filter="true" data input="#what">
</ul>
</div>
</form>
</div>
$( "#ul_what" ).on( "filterablebeforefilter", function ( e, data ) {
var $ul = $( this ),
$input = $( data.input ),
value = $input.val(),
html = "";
$ul.html( "" ); // initially null
$('#w_what').show(); // For next search
if ( value && value.length > 0 ) {
$ul.html( "<li><div class='ui-loader'><span class='ui-icon ui-icon-loading'></span></div></li>" );
$ul.listview( "refresh" );
$.ajax({
url: "/php/getWhat.php", // Ajax url
dataType: "json", // json
data: {
q: $input.val() // which value to be searched
}
})
.then( function ( response ) {
$.each( response, function ( id, val ) {
html += "<li>" + val.text + "</li>"; // json response has text element
});
$ul.html( html );
$ul.listview( "refresh" );
$ul.trigger( "updatelayout");
});
}
});
$('#ul_what').delegate('li', 'click', function () {
var ul = $(this); // when clicked
$('#what').val(ul.text()); // set the value for input
$('#w_what').hide(); // hide the div
});
希望对某些人有帮助