多页的jQuery mobile,pageshow事件

我有两个页面,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.

我需要的是一个show-handler,它对每个页面都是不同的.

最佳答案 可用解决方案

解决方案1

首先,从页面BODY中删除javascript代码并将其放入单个js文件中.在js / jquery.mobile-1.2.0.js初始化之后,应将新的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>

它将在DOM结构中加载ajax.这是未执行第二页脚本的主要原因.

解决方案2

第二种解决方案是在链接中使用rel =“external”属性,每次打开新页面时都会强制页面重新加载.

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

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

更多信息

如果您想了解有关此问题的更多信息,请参阅我在个人博客中制作的这个article.本文直接讨论了这个主题,所以我希望你不要把它看作是自我推销的尝试.

点赞