Javascript jquery移动触发器';创建';除第一次外,不工作

Javascript jquery移动触发器';创建';除第一次外,不工作,javascript,jquery,ajax,jquery-mobile,Javascript,Jquery,Ajax,Jquery Mobile,我正在使用jQuery Mobile创建一个站点,在索引页面中我在这里放置了一个搜索表单。我钩住了ajax帖子的提交事件。当ajax成功获得资源时 (html,..),放置在目标容器中,然后触发用于增强视图的创建事件。这项工作第一次做得很好。当我点击返回索引页面并再次搜索时,我得到了一个未经增强的原始listview,谁能告诉我为什么?ps:我尝试了很多方法,但是问题越来越多,官方文件太差了 $(document).bind('pageinit',function(){ $("#

我正在使用jQuery Mobile创建一个站点,在索引页面中我在这里放置了一个搜索表单。我钩住了ajax帖子的提交事件。当ajax成功获得资源时 (html,
    ..
),放置在目标容器中,然后触发用于增强视图的创建事件。这项工作第一次做得很好。当我点击返回索引页面并再次搜索时,我得到了一个未经增强的原始listview,谁能告诉我为什么?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;
        });
    });
编辑:测试Url:
另一个问题:第二个ajax请求失败,浏览器直接导航到ajax目标。

您可以尝试更改:

$("#searchresultfield").html(data).find('ul').trigger('create');
致:

每当追加或删除需要刷新的元素时,如果删除整个列表,则需要重新初始化它

此外,如果listview(“刷新”)不可见,我也会遇到不正确渲染的问题

$(document).on('pageshow','div',function(event, ui){
 if($("#searchresultfield > ul").is(":visible")) $("#searchresultfield > ul").listview('refresh');
});
尝试:

而不是

$("#searchresultfield > ul").remove();

我认为问题在于jquery mobile会将所有页面加载到一个大页面中,尽管所有页面都来自不同的文件,但导航是基于此页面中的不同点,因此,当您第一次进入该页面时,您访问的页面被视为已创建,但当单击“后退”按钮并离开该页面时,该页面仍被视为已创建,因此事件不会再次触发

我用的是:

$('#oppList').live('pageshow',function(event){
    getList();

});
其中#opplist是我刚刚加载的页面的data role=“page”的id,这与第一次加载页面还是之后加载页面无关,因为每次显示页面时都会触发事件

另请参见此处了解更多信息


希望这有帮助

处理提交事件后,您可能应该尝试将其解钩。当你回到以前的页面时,再次启动它。多次添加EventHandler会导致很多问题。

对我来说,
.trigger('create')data role=“page”

比如说

HTML代码

<div data-role="page" id="somePage">
...
</div>

希望有帮助

您的站点是一个HTML文件吗?如果没有,则每次初始化新页面时,您的事件处理程序都将运行,重新绑定
$(“#搜索”)。每次提交(…
事件处理程序。此外,我们可以看到的版本链接也会很有帮助。
$('#oppList').live('pageshow',function(event){
    getList();

});
<div data-role="page" id="somePage">
...
</div>
$('#somePage').trigger('create');