开发我的第一个 jQuery Mobile 应用程序。有一个 localStorage 值必须在整个应用程序中都有一个值,所以我点击了 pageshow 事件来检查这个值:
$(function () {
$("div[data-role='page']").on("pageshow", function (event, ui) {
if (getValue() == null) {
// show the dialog
$.mobile.changePage("#dialog");
}
});
});
这在浏览各个页面时有效,但在第一页加载时永远不会被调用。我尝试将上面的 If 语句再次复制到我添加 pageshow 侦听器的部分下方,但它具有显示对话框、隐藏它然后再次显示它的效果。
在第一页上,似乎打开对话框正在触发 pageshow(考虑到我的选择器,这很奇怪),这反过来又触发了另一个对话框。有没有人有关于如何解决这个问题的建议,或者有更好的方法来解决整个问题?
更新#1:我试过了
$.mobile.changePage( "#mypage", { allowSamePageTransition: true, transition: "none" } );
但它与我最初的问题具有相同的效果,即启动对话框,然后隐藏它,然后再次显示它。似乎以某种方式启动对话框正在触发 pageshow 事件,即使我试图在我的选择器中过滤掉它。请注意,如果您删除转换:“无”选项,则根本不会出现对话框。
更新#2:我还尝试创建一个空白初始页面,然后进行简单的页面转换
$.mobile.changePage("#mypage");
但它仍然没有正确的行为。在这种情况下,它确实将我带到了下一页,但 pageshow 事件没有触发,因为我的对话框没有出现。我知道它没有触发,因为我可以从导航菜单中选择另一个页面并且确实出现了对话框。
更新#3:我更改了我的选择器,我在其中附加了 pageshow 侦听器。我没有选择 where data-role="page",而是通过 id 选择特定页面。然后我重新尝试了我在前两次更新中描述的两种方法,但它仍然无法正常工作。首先,当我尝试使用 allowSamePageTransition 刷新初始页面时,似乎 pageshow 触发了两次,因为对话框启动了两次。然后,当我尝试使用空白初始页面,然后在附加 pageshow 侦听器后立即执行重定向时,什么也没有发生,对话框也永远不会出现。如果我导航到任何其他页面,对话框将按预期工作。我不明白为什么第一页这么麻烦。