我正在使用jQuery Mobile创建一个站点,在索引页面中我放置了一个搜索表单。我为ajax帖子挂了提交事件。当ajax成功获得资源时
(html,<ul>...</ul>
),放置在目标容器中,然后触发create事件以增强视图。这在第一次工作正常。当我点击返回索引页面并再次搜索时,我得到了一个没有增强的原始列表视图,谁能告诉我为什么? ps:我尝试了很多方法,但问题越来越多,官方文件太差了。
$(document).bind('pageinit',function(){
$("#search").submit(function(){
var searchdata = $("#search").serialize();
$.ajax({
'type':"POST",
'url':"/server/jnulib.php?action=search",
'data':searchdata,
'success':function(data){
$("#searchresultfield > ul").remove();
$("#searchresultfield").html(data).find('ul').trigger('create');
try{
$("#searchresultfield > ul").listview('refresh');
}catch(e){
}
$.mobile.changePage("#searchresult");
//$("div[data-role='header'] > a").
}
});
return false;
});
});
编辑:测试网址:http://ijnu.sinaapp.com 另一个问题:第二个ajax请求失败,浏览器直接导航到ajax目标。
答案 0 :(得分:1)
您可以尝试更改:
$("#searchresultfield").html(data).find('ul').trigger('create');
为:
$("#searchresultfield").html(data).find('ul').listview().listview('refresh');
每当您追加或删除需要刷新的元素时,如果删除整个列表,则需要重新初始化它。
此外,如果listview('refresh')显示不正确,我也遇到了问题。
$(document).on('pageshow','div',function(event, ui){
if($("#searchresultfield > ul").is(":visible")) $("#searchresultfield > ul").listview('refresh');
});
答案 1 :(得分:1)
对我而言,.trigger('create');
如果应用于data-role="page"
例如
HTML代码
<div data-role="page" id="somePage">
...
</div>
Javascript代码
$('#somePage').trigger('create');
希望有所帮助
答案 2 :(得分:0)
尝试:
$("#searchresultfield > ul").empty();
而不是
$("#searchresultfield > ul").remove();
答案 3 :(得分:0)
我认为问题在于jquery mobile加载了所有页面,尽管所有页面都是从不同的文件到一个大页面,导航是基于这个页面中的不同点,所以当你第一次进入页面时访问被认为是创建的,但是当单击后退按钮并导航离开页面时仍然认为该页面已被创建,因此事件不会再次触发,
我使用的是:
$('#oppList').live('pageshow',function(event){
getList();
});
其中#opplist是我刚加载的页面的data-role =“page”的id,无论这是在第一次加载页面时发生还是之后都没关系,因为每当页面被触发时都会触发事件显示。
请参阅Here foe jquery mobile events
希望这有帮助!
答案 4 :(得分:0)
也许您应该尝试在处理后解除提交事件。一旦你回到你以前的页面,再次启动它。多次添加事件处理程序可能会导致很多问题。