我试图在页面完全加载并且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>
但有更优雅的方法吗?
答案 0 :(得分:7)
jQuery有一个one
函数来绑定一个只执行一次的事件处理程序。查看reference。
答案 1 :(得分:4)
在jQuery Mobile框架初始化其小部件之后,pageinit
事件每页触发一次;我认为这可能是你正在寻找的。 p>
<强> 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>