如何仅在jQuery Mobile应用程序中触发显示和隐藏一个页面的事件

时间:2011-08-19 20:30:38

标签: javascript jquery-selectors jquery-mobile jquery

好的,所以我开始使用jQuery Mobile。我远不是一个JavaScript专家。 jQuery Mobile非常酷,但它让我对这个问题感到困惑。

我需要在显示某个页面时运行一些代码,然后在隐藏时运行另一个代码 - 但只需要层次结构中的某个页面。我知道如何使用pagecreate和pageshow事件(并使用它们来处理需要与每个页面一起运行的代码)。但是,我需要能够检测何时显示特定页面以及何时隐藏它。

那我试过了什么?我在页面上的以下标记上添加了自定义属性:

<div data-role="content" myspecialattribute="true">

然后在pageshow事件中,我使用jqmData()来搜索该元素。这是成功的,第一次遇到页面,然后不起作用。由于JQM加载页面的方式,然后总是在dom中找到该标记和该属性,即使我移动到其他页面,因为JQM正在使用显示/隐藏页面的聪明的ajax。

我花了好几个小时寻找解决方案 - 但我的javascript技能并不存在。我认为这很容易,所以我觉得有点愚蠢,寻求帮助。

1 个答案:

答案 0 :(得分:2)

您需要在页面中添加一个id并使用live live()来触发所需的事件,实例:

JS:

$('#page2').live('pageshow',function(event, ui){
    alert('Alert for page 2 only');
});

HTML:

<div data-role="page" id="home"> 
    <div data-role="content"> 

        <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="f"> 
            <li data-role="list-divider">Navigation</li> 
            <li><a href="#page2">Page 2</a></li> 
        </ul> 

    </div>
</div>

<div data-role="page" id="page2"> 
    <div data-role="content"> 

        <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="f"> 
            <li data-role="list-divider">Navigation</li> 
            <li><a href="#home">Home Page</a></li> 
        </ul> 

    </div>
</div>