jquery移动触发'创建'除了第一次没有工作

时间:2012-05-01 14:51:43

标签: javascript jquery ajax jquery-mobile

我正在使用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目标。

5 个答案:

答案 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

另见jquery mobile navigation

希望这有帮助!

答案 4 :(得分:0)

也许您应该尝试在处理后解除提交事件。一旦你回到你以前的页面,再次启动它。多次添加事件处理程序可能会导致很多问题。