【问题标题】:jquery mobile dialog closes after page loads页面加载后jquery mobile对话框关闭
【发布时间】:2013-11-22 15:28:45
【问题描述】:

伙计们,我遇到了一个问题,希望有人能帮忙解决。当我的 jquery 移动应用程序加载时,它会检查我的服务器以查看用户所在平台是否存在本机应用程序。如果是这样,我会弹出一个对话框,询问他们是否要下载本机应用程序。这就是问题所在,我把这个检查放在哪里似乎并不重要,当页面在移动 safari 中完成加载时,对话框就会消失。这是我开始检查的代码:

$( document ).ready(function() {
  checkRedirect();
});

但我也尝试过 pageinit 和 pagecreate。 checkRedirect() 进行 ajax 调用并根据结果弹出带有“$.mobile.changePage”的对话框

似乎浏览器仍然认为原始页面正在加载,然后在页面加载完成时以某种方式关闭对话框。抱歉,我没有更多详细信息。我认为我需要的是在整个页面加载后(以及在所有 ajax 后台加载之后)发生的事件,但我无法找到它。感谢您提供任何帮助或建议。

更新:在与 Omar 讨论后,结果证明使用“弹出窗口”而不是对话框可以满足我的需求。

【问题讨论】:

    标签: javascript jquery ajax jquery-mobile mobile-safari


    【解决方案1】:

    首先,在 jQuery Mobile 中使用 .ready() 是不正确的,使用 jQuery Mobile 事件。

    一旦发生任何页面事件,您需要延迟打开对话框/弹出窗口,以确保页面已完全加载。

    setTimeout(function () {
     $.mobile.changePage('#dialog');
    }, 50);
    

    更新:

    根据我们的讨论,在您的情况下使用 jQM 弹出小部件更可靠。

    【讨论】:

    • 我试过了......只要延迟超过页面加载的时间,它就可以工作......所以我可以将超时设置很长时间,但那仍然看起来很脆弱……
    • 浏览器认为页面加载完成后是否触发事件?
    • @johnellis 对话框是一个页面,但具有对话框的形状。您可以在一个事件中做到这一点pagebeforechange。演示:jsfiddle.net/Palestinian/88THT
    • 问题是,我不能吃默认条件,因为我不知道我马上要弹出对话框...我只知道在 ajax 调用之后...我猜想我可以使 ajax 调用同步......这是我必须做的吗?
    • @johnellis pageshow 在页面加载后触发,但我仍然认为您可能需要延迟检查几毫秒。 编辑:如果您打算使用pageshow,请使用.one 而不是.on,因为您只需要触发一次。 jsfiddle.net/Palestinian/CUt6n
    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多