如果我正确理解了您的问题,则您正在尝试仅刷新多页布局中的特定 #page 部分。
正如您所发现的$.mobile.changePage
那样,它不会那样工作,它会从服务器检索整个页面的新副本,而不仅仅是您要刷新的#page 部分。我想出的工作使用“模拟”刷新,因为没有更好的术语。
以下将引导您完成模拟刷新的设置/使用:
第 1 步 - 创建一个空白页面
将以下 html 代码放入多页面布局的 body .. /body 部分
<div data-role="page" id="empty_page_content" data-theme="b" data-content-theme="b"></div>
第 2 步 - 您的 detail() 函数
在 head .. /head 部分(或该部分加载的外部 js 文件)中,在加载 jquery 移动库之前,放置您的 dettail 函数,编写如下:
function dettail(id){
localStorage.setItem("id", id);
//emulate a refresh by switching to an empty page div (and then back to this page again)
$.mobile.changePage(
'#empty_page_content',
{
allowSamePageTransition : true,
transition : 'none',
showLoadMsg : false,
reloadPage : false
}
);
}
第 3 步 - 在 #empty_page_content 页面上设置 pageshow 事件
在head ... /head部分(或该部分加载的外部js文件)中,在加载jquery移动库之前,放置以下js代码:
$(function() {
$(document).on("pageshow", "#empty_page_content", function() {
//console.log('pageshow event - #empty_page_content only');
// return to #page whenever this page is loaded
// The return url is hardcoded in this example but it could be switched to a variable if different return pages are needed
$.mobile.changePage(
'#page',
{
allowSamePageTransition : true,
transition : 'none',
showLoadMsg : false,
reloadPage : false
}
);
});
});
第 4 步 - 每次显示时在您的#page 中执行操作
在head ... /head部分(或该部分加载的外部js文件)中,在加载jquery移动库之前,放置以下js代码:
$(function() {
$(document).on("pageshow", "#page", function() {
//console.log('pageshow event - #page');
// .. do stuff here, such as look for a stored id value and update the content of the #page accordingly
});
});
我在专用网络上成功测试了这个解决方案(所以我没有链接供您查看)。希望它会在您的项目中为您工作。如果不让我知道,我会看看我能不能帮你搞定。
请记住,最好在每个页面上加载所有页面所需的所有 head .. /head javascript 代码(最好通过在所有页面上加载相同的外部 js 文件来完成),因为 head 部分中的 js 代码仅曾经从访问的第一页加载一次。您可能打算让用户最初浏览第 1 页,但除非您可以保证如果第 2 页或第 3 页等最初被加载,您的代码应该可以工作。