Jquery Mobile Javascript无法处理ajax加载

时间:2013-01-14 09:48:47

标签: jquery-mobile

在我的html页面中有以下标记,根据是否点击了搜索图标来切换搜索栏:

<a id="searchIcon" href="/"></a> 

<div id="searchWrapOuter" style="display:none;">
    <div id="searchWrapInner">
        <div id="formContainer">
            <form id="searchForm" action="#">
                <div>
                    <input type="search" name="search-mini" id="search-mini" value="" data-mini="true" />
                </div>
            </form>
        </div>
    </div>
</div>

宽度以下javascipt / jquery:

 $(function() {
        $(document).on("click", "#searchIcon", function () {
            var searchWrapper = $("#searchWrapOuter");
            $(searchWrapper).slideToggle();
            return false;
        });
});

此代码在直接关闭Url的页面加载时按预期工作。当从加载了Ajax的链接进入页面时,将页面内容加载到DOM中,而DOM就绪处理程序仅对第一页执行。

我已阅读有关使用

的内容
  

$(document).on('pageinit'),而非$(document).ready()/ $(function()

然而,当我从ajax链接进入时,我仍然无法使其工作。实现这些事件以使代码从Ajax链接进入工作的正确方法是什么?

谢谢,

3 个答案:

答案 0 :(得分:3)

很可能是因为您使用的是ID而不是类。 jQuery Mobile无法正常使用ID,因为它将页面缓存到DOM中,因此如果您打开页面,关闭它,然后返回页面,您可能在DOM内部有两次页面(一个可见,一个隐藏/缓存) )。所以当你$("#searchWrapOuter")时,你不知道你实际处理的是哪个元素(在你的情况下,可能是隐藏的元素)。

解决方案是将您的ID更改为类。这不是很直观,但我发现这是使用jQuery Mobile的最佳方式。

另请注意文档中可能与您相关的评论:

  

所有元素的id属性不仅必须在给定页面上是唯一的,而且在站点的页面中也必须是唯一的。这是因为jQuery Mobile的单页导航模型允许同时在DOM中存在许多不同的“页面”。这也适用于使用多页模板,因为模板上的所有“页面”都会立即加载。

http://jquerymobile.com/demos/1.2.0/docs/pages/page-anatomy.html

答案 1 :(得分:0)

您可以手动将延迟时间调整为500毫秒和1秒。

$(searchWrapper).delay(1000).slideToggle(); 

答案 2 :(得分:0)

我的问题是页面ID在页面标签下方。因此,一旦我将页面div移动到其上方,则javascript已包含在ajax页面加载中。在此之前