jQuery Mobile - 仅触发一次pageshow事件

时间:2012-03-09 18:22:10

标签: jquery-mobile jquery

我试图在页面完全加载并且JQM处理了所有ui修改(即列表视图,按钮等)后,只执行一次JS片段。我确实希望它只在该页面上执行,而不是在后续页面上执行。

我首先尝试的是页面显示

<script>
$('[data-role=page]').live("pageshow", function() {
    alert("Ready!");
}); 
</script>

这就存在这样的问题:该函数现在附加到页面div,并在每次显示任何后续页面时执行。但是,我只希望执行一次,并且只对包含该JS片段的页面执行。

有没有办法收听pageshow事件,而不实际附加功能。

我能够做到的唯一方法是通过这样的绑定和解除绑定:

<script>
$('[data-role=page]').bind("pageshow.test", testfun);

function testfun() {
    alert("Ready!");
    $('[data-role=page]').unbind("pageshow.test", testfun);
}   
</script>

但有更优雅的方法吗?

2 个答案:

答案 0 :(得分:7)

jQuery有一个one函数来绑定一个只执行一次的事件处理程序。查看reference

答案 1 :(得分:4)

在jQuery Mobile框架初始化其小部件之后,pageinit事件每页触发一次;我认为这可能是你正在寻找的。

  

<强> pageinit

     

在初始化页面上触发,初始化后发生。   我们建议绑定到此事件而不是DOM ready(),因为这样   无论页面是直接加载还是加载,都可以使用   内容作为Ajax导航的一部分被拉入另一个页面   系统

来源:http://jquerymobile.com/demos/1.1.0-rc.1/docs/api/events.html

如果要绑定到特定页面而不是其他页面,请仅选择要更改的页面...以下是一个示例:

<script>
$(document).delegate('#my-page-id', 'pageinit', function() {
    alert("PageInit!");
}); 
</script>