尝试显示包含未排序列表的JQMobile可折叠。使用ajax调用追加列表时,不显示可折叠。静态添加列表时,可正确显示可折叠。有什么建议吗?
感谢
<script>
$(document).ready(function() {
var updateSectionsPage = function() {
// 1. Get the page and list we need to work with
var $page = $('#homeList');
// 2. Build the URL we need using the data stored on the main view page
var strUrl = 'http://xyz';
// 3. Get the sections and append them to the list
$.ajax({
url: strUrl,
dataType: 'json',
cache: false,
success: function(data) {
$sections = $page.find('#sections');
// 3.1 Delete the existing content, if any
$sections.empty();
// 3.2 Create a new collapsible
$sections.html('<div id="collapsible" data-role="collapsible" data-collapsed="true" data-theme="a" data-content-theme="a"></div>');
// 3.3 Create the title of collapsible
$sections.html('<h3>ColdPlay</h3>');
// 3.4 Create the list and store it into a JQuery object
$sections.html('<ul id="list" data-role="listview" data-inset="false"></ul>');
$list = $page.find('#list');
// 3.5 Build HTML that contains the desired information
for (var j in data.list[0].list){
var strHtml = '<li><a href="#pageDetail"><img src="' + data.list[0].list[j].img + '" /><h4>' + data.list[0].list[j].title + '</h4></a></li>';
// Make it into a jQuery object...
var item = $(strHtml);
// ...so we can append it to our list.
$list.append(item);
}
// Call the listview widget.
$list.listview();
},
error: function() {
alert("An error occurred. please, try it again!");
}
});
}(); // 4. Call the updateSectionsPage() function
})
</script>
答案 0 :(得分:1)
我认为您只需将$list.listview();
来电转为$list.listview('refresh');
。
此外,您可以通过更改附加新列表项的方式获益。检查this post out。如果可以避免,则不希望在循环中嵌套追加调用。您也可以不使用jQuery strHtml
选择器包装$
,因为它可能没有必要。
该优化链接由另一个SO帖子here提供。
答案 1 :(得分:0)
创建列表后,请使用以下代码段 -
$list.listview('refresh');
$page.trigger('create');
取代$list.listview();
在jquery mobile中使用$(document).ready()
并不是最佳做法。请参阅下面的注释
重要提示:使用pageInit(),而不是$(文档).ready()
你在jQuery中学到的第一件事就是在里面调用代码 $(document).ready()函数,所以一切都会尽快执行 DOM已加载。但是,在jQuery Mobile中,Ajax用于加载 导航时每个页面的内容都放入DOM中,并准备好DOM 处理程序仅对第一页执行。每当执行代码时 加载并创建新页面,您可以绑定到pageinit事件。 此事件在本页底部详细说明。
答案 2 :(得分:0)
谢谢大家,我的代码中的问题是在丢失的collapsible()小部件调用上。一旦动态创建html页面,我们需要使用jqmobile小部件调用来呈现它:listview()和collapsible()。这是工作代码。
function fillSectionsPage() {
// 1. Get the page we need to work with
var $page = $('#sectionList');
// 2. Build the URL we need using the data stored on the main view page
var strUrl = 'http://xyz';
// 3. Get the sections and append them to the list
$.ajax({
url: strUrl,
dataType: 'json',
cache: false,
success: function(data) {
$sections = $page.find('#sections');
// 3.1 Delete the existing content, if any
$sections.empty();
// 3.2 Append a new collapsible and store it into a JQuery object
$sections.append('<div id="collapsible" data-role="collapsible" data-collapsed="true" data-theme="c" data-content-theme="c"></div>');
$collapsible = $page.find('#collapsible');
// 3.3 Append the title of collapsible
$collapsible.append('<h3>' + data.list[0].title + '</h3>');
// 3.4 Append the list header and store it into a JQuery object
$collapsible.append('<ul id="list" data-role="listview" data-inset="false"></ul>');
$list = $page.find('#list');
// 3.5 Build the list items
var htlmList = [];
for (var j in data.list[0].list){
htlmList[j] = '<li><a href="#pageDetail"><img src="' + data.list[0].list[j].img + '" /><h4>' + data.list[0].list[j].title + '</h4></a></li>';
}
// 3.6 Append the list items to the list header
$list.append(htlmList.join(''));
// 3.7 Render the listview and the collapsible
$list.listview();
$collapsible.collapsible();
},
error: function() {
alert("An error occurred, please, try it again!");
}
});
}
答案 3 :(得分:0)