Jquery Mobile - $.mobile.changepage 不加载外部 .JS 文件

IT技术 javascript jquery html jquery-mobile
2021-02-02 01:24:31

所以我很难$.mobile.changePage正常工作。我这样称呼它:

$.mobile.changePage( "DataformsM-AddRecord.html", { transition: "slide"} );

但出于某种原因,当加载 HTML 页面时,没有包含任何外部 .js(我编写的实际执行某些操作的文件)。我遵循重要的加载约定

-Jquery
-(CUSTOM JS)
-Jquery Mobile

有谁知道为什么这不能正确加载?此外,pageshow 功能也没有被触发,这很奇怪。它看起来像这样:

$("div[data-role*='page']").live('pageshow', function(event, ui) { 

    loadFormFields();

});

现在页面已呈现,但没有任何功能性的事情发生。如果我破解它并执行以下操作:

document.location.href="DataformsM-AddRecord.html";

它将正常运行。

6个回答

jQuery Mobile 不会将整个页面拉入 dom,它会抓取第一个 data-role="page"元素及其后代并将其拉入当前 dom。

因此<head>不会包含文档中的任何脚本

我通常将我网站的所有功能 JavaScript 放在索引页面上,然后当外部页面加载到 dom 时,它们可以从已经加载的脚本中受益。

此外,您可以将 JavaScript 代码放置在data-role="page"元素内,当 jQuery Mobile 对页面进行 AJAX 加载时,它将被包含在内。

更新

一个很好的系统是将您的所有 JS 放入一个包含文件中,并将其包含在站点的每个页面上。如果通过 AJAX 将页面带入 DOM,它将被忽略,但如果有人刷新您站点中的某处,则 JS 将可用。

@Derek 您可以在服务器端包含一个同时包含 CSS 和 JS 的文件。但是使用 a<link />和 a<script />标签将外部 CSS 和 JS 放在每个文档上非常容易
2021-04-04 01:24:31
这实际上完成了加载外部 JS 文件的技巧。我将写一个补充答案,以进一步解释我为使其 100% 工作所做的工作。我仍然觉得这是一个黑客,但截至目前,它看起来不错。
2021-04-13 01:24:31
@Jaspar 响应您的“更新”,有没有办法创建一个通用包含文件,其中包含您所有的CSS和 Javascript?谢谢
2021-04-13 01:24:31

因此,基于 Jasper 上面如此明智地指出的内容,我想出了一个可行的解决方案。

基本上,我将所有的 JS 和 CSS 文件加载到索引页中以开始。现在当你加载时,这个方法将被触发pageshow

$("div[id*='page1']").live('pageshow', function(event, ui) { 
    setTimeout(function() { window.scrollTo(0, 1) }, 100);
    doStuffWhenPageintializes();
});

一旦我调用$.mobile.changePage( "someOtherPage.html", { transition: "slide"} );,该pagehide方法就会被 page1 对象触发。您可以在此处触发方法来初始化您要转换到的页面。

$("div[id*='page1']").live('pagehide', function(event, ui) { 
    setTimeout(function() { window.scrollTo(0, 1) }, 100);
    loadStuffForNewPage();
});

现在您可以删除该document.location.href="external.html"行并简单地使用本机 JQM 调用。希望这可以帮助一些人。

您还可以对加载的每个页面使用 pageInit()。
2021-03-22 01:24:31

请用每个 html 页面中的所有脚本重复 head 部分,因为更改页面将导致页面重新加载并重新创建 head 部分...

这样一个简单的更改页面就可以工作了:

$.mobile.changePage('abc.html', {
    transition: 'slide'
});

JQM 似乎没有提供“正确”的方式来加载外部 html 文件。非常感谢 Jasper 的解决方案。

如果我们想切换到外部页面,JQM 建议使用 AJAX 重新加载,例如:

<a href="foo.html" rel="external">

或者

<a href="foo.html" data-ajax="false">

我两个都试过,但都没有用——我正在为原生应用程序编程,所以也许它适用于网络应用程序?

我通过将脚本放在最后加载的页面的头部部分来解决这个问题,这对我有帮助和工作。JQM 没有在 DOM 中获取最近加载页面的 head 部分,因此没有带来最近页面的 JS 内容。通过将所有脚本放在外部 JS 文件中或将其放在第一页的头部部分,可能对您有用。