gpt4 book ai didi

javascript - 为什么我必须将所有脚本放入 jquery mobile 中的 index.html

转载 作者:技术小花猫 更新时间:2023-10-29 11:49:57 24 4
gpt4 key购买 nike

我已经使用 $.mobile.changepage 在我的 phonegap+jquerymobile 项目中进行重定向。然而让我感到困惑的是,我需要将所有页面的脚本放在同一个文件index.html 中。否则,重定向页面将无法执行其 header 中的功能。

例如,我的 index.html 似乎是$(document).bind("deviceready",function(){$.mobile.changepage("test.html");})

然后,我的设备将重定向到 test.html,这似乎是

$("#btnTest").click(function(){alert("123");})
<button id="btnTest">Test</button>

但是,脚本永远不会在 test.html 中执行。然后我将脚本放到 index.html 中,我期望完成的事情就完成了。不管怎样,如果我把所有的脚本都放在同一个页面上,这个项目将变得越来越难以保存。感谢您的帮助。

最佳答案

介绍

这篇文章也可以找到 HERE 作为我博客的一部分。

jQuery Mobile 如何处理页面变化

要了解这种情况,您需要了解 jQuery Mobile 的工作原理。它使用 ajax 加载其他页面。

第一页正常加载。它的 HEADBODY 被加载到 DOM>,他们在那里等待其他内容。当加载第二个页面时,只有它的 BODY 内容被加载到 DOM 中。更准确地说,甚至 BODY 也没有完全加载。只有第一个具有属性 data-role="page"的 div 将被加载,其他所有内容都将被丢弃。即使您在 BODY 中有更多页面,也只会加载第一个页面。此规则仅适用于后续页面,如果您在初始 HTML 中有更多页面,所有这些页面都将被加载。

这就是为什么您的按钮显示成功但点击事件不起作用的原因。在页面转换期间忽略了其父级 HEAD 的同一点击事件。

这是官方文档:http://jquerymobile.com/demos/1.2.0/docs/pages/page-links.html

不幸的是,您不会在他们的文档中找到这个描述。以太他们认为这是常识,或者他们忘记像我的其他主题一样描述这一点。 (jQuery Mobile 文档很大但缺少很多东西)。

解决方案1

在您的第二个页面和所有其他页面中,将您的 SCRIPT 标记移动到 BODY 内容中,像这样:

<body>
<div data-role="page">
// And rest of your HTML content
<script>
// Your javascript will go here
</script>
</div>
</body>

这是一个快速的解决方案,但仍然很丑陋。

工作示例可以在我的其他答案中找到: Pageshow not triggered after changepage

另一个工作示例:Page loaded differently with jQuery-mobile transition

解决方案2

将所有 javascript 移动到原始的第一个 HTML 中。收集所有内容并将其放入单个 js 文件中,放入 HEAD 中。在加载 jQuery Mobile 后对其进行初始化。

<head>
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no; target-densityDpi=device-dpi"/>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
<script src="index.js"></script> // Put your code into a new file
</head>

最后我将描述为什么这是一个好的解决方案的一部分。

解决方案 3

在您的按钮和用于更改页面的每个元素中使用 rel="external"。因为它不会将 ajax 用于页面加载,您的 jQuery Mobile 应用程序将像普通的 web 应用程序一样运行。不幸的是,这不是您的情况的好解决方案。 Phonegap 永远不应作为普通网络应用程序运行。

<a href="#second" class="ui-btn-right" rel="external">Next</a>

官方文档,找章节: Linking without Ajax

现实的解决方案

现实的解决方案将使用解决方案 2。但与解决方案 2 不同的是,我会使用相同的 index.js 文件并在每个可能的其他页面的 HEAD 中对其进行初始化。

现在你可以问我为什么

Phonegap 就像 jQuery Mobile 一样有问题,迟早会出现错误,如果您的每个 js 内容都是错误的,您的应用程序将失败(包括加载的 DOM)在单个 HTML 文件中。 DOM 可以被删除,Phonegap 将刷新您的当前页面。如果该页面没有 javascript,则在重新启动之前它将无法工作。

结语

这个问题可以通过良好的页面架构轻松解决。如果有人感兴趣,我已经写了一个 ARTICLE 关于良好的 jQuery Mobile 页面架构。简而言之,我要讨论的是,在成功创建第一个应用程序之前,了解 jQuery Mobile 的工作原理是您需要了解的最重要的事情。

关于javascript - 为什么我必须将所有脚本放入 jquery mobile 中的 index.html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15800121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com