jQuery mobile,多个页面的 pageshow 事件

标签 jquery events jquery-mobile

我有两个页面,test1.html 和 test2.html。每当其中一个页面可见时,我都想执行一些代码。

这是两个页面:

test1.html:

    <!DOCTYPE html>
<html><head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>test1</title>
    <link rel="stylesheet"  href="css/jquery.mobile-1.2.0.css" />
    <script src="js/jquery.js"></script>
    <script src="js/jquery.mobile-1.2.0.js"></script>
</head><body>

<div data-role="page" id="test1">

    <div data-role="content">

    <a href="test2.html" data-role="button">jump to test2</a>

    </div>

</div>

<script type="text/javascript">

$(document).on('pageshow', '#test1', function (data) {
    alert('pageshow test1');
});

</script>
</body></html>

test2.html:

<!DOCTYPE html>
<html><head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>test1</title>
    <link rel="stylesheet"  href="css/jquery.mobile-1.2.0.css" />
    <script src="js/jquery.js"></script>
    <script src="js/jquery.mobile-1.2.0.js"></script>
</head><body>

<div data-role="page" id="test2">

    <div data-role="content">

    <a href="test1.html" data-role="button">jump to test1</a>

    </div>

</div>

<script type="text/javascript">
$(document).on('pageshow', '#test2', function (data) {
    alert('pageshow test2');
});
</script>

</body></html>

当我从 test1.html 开始时,我只收到 test1 的警报(每次返回时也是如此),但从未收到 test2.html 的警报。

我需要的是一个每个页面都不同的显示处理程序。

最佳答案

可用的解决方案

解决方案1

首先,从页面 BODY 中删除 JavaScript 代码,并将其放入单个 js 文件中。新的 js 文件应在 js/jquery.mobile-1.2.0.js 初始化后放入 HEAD 中。

类似这样的事情:

<script src="js/jquery.js"></script>
<script src="js/jquery.mobile-1.2.0.js"></script>
<script src="js/custom.js"></script>

在您的情况下,jQuery mobile 正在加载第二个 HTML 文件,但仅加载这部分:

<div data-role="page" id="test2">
    <div data-role="content">
        <a href="test1.html" data-role="button">jump to test1</a>
    </div>
</div>

它将通过ajax加载到DOM结构中。这是第二页脚本不执行的主要原因。

解决方案2

第二个解决方案是在链接中使用 rel="external" 属性,它将在每次打开新页面时强制页面重新加载。

<a href="test1.html" data-role="button" rel="external">jump to test1</a>

无论如何,如果可能的话,永远不要在页面BODY内使用SCRIPT标签,它会起作用,但在同时它可能会导致额外的问题

更多信息

如果您想了解有关此问题的更多信息,如何解决它+示例,请查看此 article 我在我的个人博客中制作。本文直接讨论这个话题,希望您不要将其视为 self 推销的尝试。

关于jQuery mobile,多个页面的 pageshow 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14502309/

相关文章:

javascript - 获取 URL 参数以使用 jQuery 或 javascript 修改选择表单

c# - 如何从Web服务生成的客户端应用程序引用XML文件

delphi - 如何在处理期间查看查询执行的进度?

javascript - Reactjs - event.stopPropagation 不工作

jquery - 在 jQuery Mobile 中设置内容的最大宽度?

jquery - jqm+phonegap 中的 pagebeforeshow 事件有问题吗?

javascript - jquery 没有按照正确的方式执行

Jquery — 将 URL 正则表达式插入大写句子?

javascript - 除非刷新页面,否则 Jquery Mobile Web 应用程序无法工作

c# - ComboBox 在键入时更改文本颜色的事件