jquery-mobile - 页面加载时的 jQuery Mobile 对话框

标签 jquery-mobile dialog pageshow

正在开发我的第一个 jQuery Mobile 应用程序。有一个 localStorage 值必须在整个应用程序中都有一个值,所以我点击 pageshow 事件来检查这个值:

$(function () {
$("div[data-role='page']").on("pageshow", function (event, ui) {
    if (getValue() == null) {
        // show the dialog
        $.mobile.changePage("#dialog");
    }
});
});

这在浏览各个页面时有效,但在第一页加载时永远不会被调用。我试图在我添加pageshow监听器的部分下面再次复制上面的If语句,但它具有显示对话框,隐藏它,然后再次显示它的效果。

在第一页上,打开对话框似乎正在触发 pageshow(这很奇怪,考虑到我的选择器),这反过来又触发了另一个对话框。有没有人有关于如何解决这个问题的建议,或者有更好的方法来解决整个问题?

更新 #1:我试过
$.mobile.changePage( "#mypage", { allowSamePageTransition: true, transition: "none" } );

但它与我的原始问题具有相同的效果,即启动对话框,然后隐藏它,然后再次显示它。似乎以某种方式启动对话框正在触发 pageshow 事件,即使我试图在我的选择器中过滤掉它。请注意,如果您删除 过渡:“无”选项,该对话框根本不出现。

更新 #2:我也尝试创建一个空白的初始页面,然后做一个简单的页面转换
$.mobile.changePage("#mypage");

但它仍然没有正确的行为。在这种情况下,它确实将我带到下一页,但 pageshow 事件不会触发,因为我的对话框没有出现。我知道它没有触发,因为我可以从我的导航菜单中选择另一个页面并且对话框确实出现。

更新 #3:我更改了附加页面显示监听器的选择器。我没有选择 data-role="page"的位置,而是通过它们的 id 选择特定页面。然后我重新尝试了我在前两次更新中描述的两种方法,但它仍然无法正常工作。首先,当我尝试使用 allowSamePageTransition 刷新初始页面时,似乎 pageshow 触发了两次,因为对话框启动了两次。然后,当我尝试使用空白的初始页面,然后在附加 pageshow 监听器后立即进行重定向时,没有任何 react 并且该对话框永远不会出现。如果我导航到任何其他页面,对话框会按预期工作。我不明白为什么第一页这么麻烦。

最佳答案

设置一个时间间隔来显示对话框,而不是在页面显示后调用它。

$(document).on('pageshow', '#myPage' ,function () {
 if (getValue() == null) {
  setTimeout(function () {
   $.mobile.changePage('#dialog');
  }, 100); // delay above zero
 }
});

这样,对话框就会在 pageshow 上弹出事件并且只有一次。

update



我在此 blog 上发现了这个有趣的 jQueryMobile 事件图.它解释了为什么在多页面结构的情况下,对话框或弹出窗口在第一页上触发两次,而不是在其余页面上触发。似乎一旦页面准备好进入 DOM 就会触发,然后再次打开 pageshow .设置超时可防止对话框在 pageinit 上触发,因此跳过该事件直到 pageshow被触发。

enter image description here

Image / diagram source: http://bradbroulik.blogspot.co.nz/2011/12/jquery-mobile-events-diagram.html

关于jquery-mobile - 页面加载时的 jQuery Mobile 对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15692186/

相关文章:

javascript - JQuery Mobile,通过 window.location 重定向可防止 pageshow 事件

jquery - 有没有办法可以强制代码在按钮样式更新后单击后运行?

jquery - 如何通过 Jquery Mobile 中的值更改选择菜单中的选定选项?

java - 关闭 JDialog Java

MATLAB:输入以确认输入对话框?

android - 如何创建将在水平维度上充满的对话框

javascript - PageTransitionEvent.persisted 何时评估为真?

javascript - 为什么我使用 setTimeout 的同步代码在 JavaScript 中表现得异步?

Android Chrome - 按键事件不返回任何关键数据(jQuery)?

JavaScript - bfcache/pageshow 事件 - event.persisted 总是设置为 false?