我有两个页面,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,每个页面都不同。
答案 0 :(得分:2)
首先,从页面 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。这是第二页脚本未执行的主要原因。
第二种解决方案是在链接中使用 rel="external"
属性,每次打开新页面时都会强制重新加载页面。
<a href="test1.html" data-role="button" rel="external">jump to test1</a>
无论如何,如果可能的话,永远不要在页面 SCRIPT
中使用 BODY
标记,它会起作用,但同时又会导致其他问题
如果您想了解有关此问题的更多信息,如何解决此问题+示例请查看我在个人博客中制作的 article 。本文直接讨论了这个主题,所以我希望你不要把它看作是自我推销的尝试。