Javascript Jquery Mobile-$.Mobile.changepage未加载外部.JS文件

Javascript Jquery Mobile-$.Mobile.changepage未加载外部.JS文件,javascript,jquery,html,jquery-mobile,Javascript,Jquery,Html,Jquery Mobile,因此,我很难让$.mobile.changePage正常工作。我这样称呼它: $.mobile.changePage( "DataformsM-AddRecord.html", { transition: "slide"} ); document.location.href="DataformsM-AddRecord.html"; 但是由于某种原因,当加载HTML页面时,外部的.js(我编写的文件实际上是用来做一些事情的)都不包括在内。我正在遵循 -Jquery -(CUSTOM JS) -

因此,我很难让
$.mobile.changePage
正常工作。我这样称呼它:

$.mobile.changePage( "DataformsM-AddRecord.html", { transition: "slide"} );
document.location.href="DataformsM-AddRecord.html";
但是由于某种原因,当加载HTML页面时,外部的.js(我编写的文件实际上是用来做一些事情的)都不包括在内。我正在遵循

-Jquery
-(CUSTOM JS)
-Jquery Mobile
有人知道为什么没有正确加载吗?而且,pageshow函数也没有被触发,这很奇怪。看起来是这样的:

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

    loadFormFields();

});
现在页面被呈现,但是没有任何功能性的事情发生。如果我破解它并做类似的事情:

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

它将正常工作。

jQuery Mobile不会将整个页面拉入dom,它会首先抓取元素及其子元素,并将其拉入当前dom

因此,文档的
中的任何脚本都将不包括在内

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

另外,您可以将JavaScript代码放在
data role=“page”
元素中,当jQuery Mobile执行页面的AJAX加载时,它将被包括在内

更新


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

我也在寻找这种加载外部页面的“正确方法”。然而,我同意你的观点,你的破解确实有效。我现在就接受黑客攻击:

    $(document).ready(function(){
    $("#page1").bind('ended', function(){
        $.mobile.changePage($(document.location.href="external.html"), 'fade');
  });
});

因此,在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”})
,将为page1对象触发
pagehide
方法。在这里,您可以触发方法来初始化要转换到的页面

$("div[id*='page1']").live('pagehide', function(event, ui) { 
    setTimeout(function() { window.scrollTo(0, 1) }, 100);
    loadStuffForNewPage();
});
现在,您可以删除
document.location.href=“external.html”
行,只需使用本机JQM调用即可。希望这对一些人有所帮助。

看来JQM没有提供加载外部html文件的“正确”方法。非常感谢贾斯珀的解决方案

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

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



我两个都试过了,但都没用-我“我正在为本地应用程序编程,所以它可能适用于web应用程序?

我解决了这个问题,将脚本放在上次加载的页面的标题部分,这对我很有帮助,也很有用。JQM没有获取DOM中最近加载的页面的头部分,因此没有带来最近页面的JS内容。将所有脚本放在一个外部JS文件中,或将其放在第一页的标题部分,可能会对您有所帮助。

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

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

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

当您这样做时,这是否真的进行了转换?因为我的页面正在加载,但我得到了一个
toPage。JQM文件中的数据(“页面”)未定义
错误。我认为缺少了一些东西…请查看我根据上面Jasper的答案发布的解决方案。不,转换不起作用。我正在努力解决这个问题。这可能与$(document).ready.(函数)有关,因为我已经读到JQM应该避免这种情况。我发现转换确实有效,只是在FF中不起作用。出于某种原因,它不喜欢这种过渡。请在其他浏览器上试用。:)这实际上实现了加载外部JS文件的技巧。我将写一个补充答案,进一步解释我是如何让它100%工作的。我仍然觉得这是一个黑客攻击,但到目前为止,它看起来不错。@Jaspar在回应您的“更新”时,有没有办法创建一个包含所有CSS和Javascript的通用包含文件?Thanks@Derek您可以在服务器端包含包含CSS和JS的文件。但是,只需使用
标记就可以很容易地将外部CSS和JS放在每个文档上。您还可以对加载的每个页面使用pageInit()。