问题描述:
正如 Omar 在他的评论中指出的那样,对于单页面模型,第一个 JQM 页面在以下条件下在 DOM 中重复:
- 用于请求页面的 url 是 yoursite.com/ 而不是 yoursite.com/index.html
- 属性
data-url=""(link to API)未设置,或设置错误
从另一个 JQM 页面导航到第一页时会发生重复。
示例:
请参阅下面的两个文件 index.html 和 index2.html。
index.html 包含一个选择菜单和一个指向 index2.html 的导航按钮。
index2.html 仅包含一个导航回 index.html 的按钮(请注意,这是一个带有 href 到 index.html 的锚标记,不使用属性 data-rel="back"。)
index.html:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page">
<div data-role="main" class="ui-content">
<p>Page 1 content</p>
<select name="type[]" id="type" multiple="multiple" data-native-menu="false" data-inline="true" >
<!-- options -->
<option>Select...</option>
<option value="1">Audi</option>
<option value="2">BMW</option>
<option value="3">Ford</option>
</select>
<a href="index2.html" data-role="button" data-inline="true" data-icon="star">Page 2</a>
</div>
</div>
</body>
</html>
index2.html:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page">
<div data-role="main" class="ui-content">
<p>Page 2 content</p>
<a href="index.html" data-role="button" data-inline="true" data-icon="home">Home</a>
</div>
</div>
</body>
</html>
这些文件也可以在这里找到:https://www.elitesystemer.no/demo/JQMduplication/
要重现该问题,请执行以下操作:
- 将这两个文件存储在同一个文件夹中的某处
- 导航到文件夹,不要在 URL 中指定 index.html
- 点击选择菜单并确认它有效
- 点击第2页按钮,确认index2.html已加载
- 单击主页按钮并确认 index.html 已再次加载
- 单击选择菜单。打不开。
现在检查 DOM(大多数浏览器中的 F12 键)。将有一页带有属性(在上述 URL 的情况下)data-url="/demo/JQMduplication/",第二页带有数据属性 data-url="/demo/JQMduplication/index.html" 和 data-external-page="true"。
修复
要纠正此行为并避免页面重复,请使用数据属性 data-url 提供正确的 URL,而不是用于请求页面的 url,例如:data-url="/path/index.html"
示例:
如上例所示,正确的 index.html 将是:
<div data-role="page" data-url="/demo/test/index.html">
<div data-role="main" class="ui-content">
<p>Page 1 content</p>
<select name="type[]" id="type" multiple="multiple" data-native-menu="false" data-inline="true" >
<!-- options -->
<option>Select...</option>
<option value="1">Audi</option>
<option value="2">BMW</option>
<option value="3">Ford</option>
</select>
<a href="index2.html" data-role="button" data-inline="true" data-icon="star">Page 2</a>
</div>
</div>