【问题标题】:Jquery mobile form response page does not download content from pageinit until refresh of page在刷新页面之前,Jquery 移动表单响应页面不会从 pageinit 下载内容
【发布时间】:2023-11-21 08:36:01
【问题描述】:

我是 jquery mobile 的新手,在获取我使用 pageinit 动态插入的内容以在表单响应页面的第一次显示时遇到问题。它会在页面的后续刷新时显示。我也不希望内容被缓存。

我需要使用 ?blah=1&blah=2 之类的查询字符串值,因为我在调用外部 json 文件时会使用这些值。

我应该怎么做?如果我使用 rel="external" 并将 ajax 设置为 false,我会遇到 android 上的问题。那么在页眉中使用pageinit,如何使动态加载的内容(在示例中,以秒为单位的时间)在第2页第一次显示?

我已将问题简化为下面的测试页面。

预期的行为。当您单击表单的提交按钮时,您将进入第二页,该页面应显示从 datetime 获取的秒数

实际行为。在页面刷新之前,秒/时间不会显示在第二页上。

在其他地方,我遇到了将 pageinit 代码放入 div 本身的建议,但这导致内容缓存在 android 上(即秒数保持不变),所以我不想这样做这个。

任何关于我应该如何解决这个问题的想法将不胜感激

示例代码

=======

第 1 页 - 表单

<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>
<script src="/scripts/myinit.js"></script>
</head>
<body>
<div data-role="page" id="page1" data-add-back-btn="true">
<div data-role="content" data-theme="b">

<form action="page_2.htm" method="GET" id="form1" name="form1">

<input type="hidden" name="seconds" value="">
<div class="ui-block-b"><button type="submit" data-theme="a">Submit</button></div>
</form>
</div>

</div>
</body>
</html>

===

第 2 页表单响应页面

<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" />

<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>

<script src="/scripts/myinit.js"></script>
</head>
<body>
<div data-role="page" id="page2" data-add-back-btn="true">
<div id="job" data-role="content">
</div>
</div>
</body>
</html>

===

名为 /scripts/myinit.js 的自定义 javascript 文件(包含在以上两个页面中)

$('#page1').live('pageinit', function(event) {

var seconds = new Date().getTime();

$('input[name=seconds]').val(seconds);

});


$('#page2').live('pageinit', function(event) {

var querystring = location.search.replace( '?', '' ).split( '&' );

var queryObj = {};

for ( var i=0; i<querystring.length; i++ ) {

var name = querystring[i].split('=')[0];
var value = querystring[i].split('=')[1];

queryObj[name] = value;
}

var seconds = queryObj["seconds"];

$('#job').append("seconds=" + seconds);

});

【问题讨论】:

    标签: forms caching jquery-mobile refresh page-init


    【解决方案1】:

    尝试通过 pageshow 更改 pageinit。我有同样的问题,它对我有用

    【讨论】:

    • 很遗憾,我说得太早了。这适用于台式机 iPhone 上的 Chrome,但不适用于 android。有什么想法吗?
    • 尝试通过几个警报找到卡住的位置并告诉我。 (远射:尝试将第二个函数中的秒变量更改为像 seconds1 这样无关紧要的变量)
    • 非常感谢您回到我身边。意识到您的解决方案 pageshow 确实有效。这实际上与我获取失败的查询字符串值的方式有关。我把代码放在这里演示了问题jsfiddle.net/sGGJX 如果单击提交,则查询字符串值的秒数不会第一次显示(它是空白的)但是如果我从当前页面获取秒数/时间,它会立即显示.修改后的问题是:如何或在哪里获取页面显示中的查询字符串值
    • 试试这个*.com/questions/439463/…希望它有帮助:)
    • 非常感谢。你是明星:-) 我正在努力通过这些努力让一个人工作。观看此空间
    【解决方案2】:

    像这样链接到外部文件:

    HTML --

    <a href="#" id="external-link">I'm a Link</a>
    

    JS--

    $(document).delegate('#external-link', 'click', function () {
        $.mobile.changePage('/path/to/file.html', { reloadPage : true });
        return false;
    });
    

    changePage() 函数设置reloadPage 选项将允许刷新外部页面而不是加载缓存版本。由于外部页面将被刷新,它的 pageinit 代码将在初始化时运行,并且您的代码应该可以正常运行。

    文档:http://jquerymobile.com/demos/1.1.0-rc.1/docs/api/methods.html

    【讨论】:

    • 嗨贾斯珀感谢您的回复。不幸的是,在这种情况下这对我不起作用。它肯定会强制页面加载,但是我无法获取查询字符串值
    最近更新 更多