【问题标题】:jQuery Mobile - firing pageshow event only oncejQuery Mobile - 仅触发一次 pageshow 事件
【发布时间】:2023-04-08 02:11:01
【问题描述】:

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

我首先尝试的是pageshow

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

这有一个问题,该函数现在附加到页面 div 并且每次显示任何后续页面时都会执行。但是,我只希望它执行一次,并且只针对包含该 JS sn-p 的页面。

有没有办法在不实际附加函数的情况下监听 pageshow 事件。

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

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

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

但是有没有更优雅的方法呢?

【问题讨论】:

  • 要仅绑定到单个页面,请在选择器中使用它的 ID,而不是 [data-role=page],后者会选择 data-role 属性设置为 page 的所有元素:$('#my-page').bind('pageinit', ...)。跨度>

标签: jquery-mobile jquery


【解决方案1】:

jQuery 有一个one 函数来绑定一个事件处理程序,使其只执行一次。检查reference

【讨论】:

  • 谢谢,我不知道一个功能。
【解决方案2】:

pageinit 事件在 jQuery Mobile 框架初始化其小部件之后每页触发一次;我想这可能就是你要找的东西。

页面初始化

在初始化页面后触发。 我们建议绑定到此事件而不是 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2013-06-14
    • 1970-01-01
    • 2015-07-13
    相关资源
    最近更新 更多