2012-07-28 93 views
2

有没有办法改变jQuery Mobile中的页面,但仍然有$(document).ready函数启动?我调用$ .mobile.changePage时似乎遇到一些问题,因为我的页面并不总是完全加载....jQuery Mobile ChangePage替代方案

或者找不到changePage的替代方法,是否有刷新页面的方法通过changePage加载到DOM?

+0

可能重复[Jquery Mobile - $ .mobile.changepage不加载外部.JS文件](http://stackoverflow.com/questions/7449402/jquery-mobile-mobile-changepage-not-loading-external-js文件) – Jasper 2012-08-02 20:10:21

+0

这是一个很常见的问题/问题。当您转移到AJAX导航模型时,您必须重新考虑您的事件绑定,因为您在整个用户体验中使用相同的DOM。我已经回答了类似的问题,我认为这个答案可以帮助你:http://stackoverflow.com/questions/7449402/jquery-mobile-mobile-changepage-not-loading-external-js-files/7449731#7449731 – Jasper 2012-08-02 20:10:28

回答

2

这个答案是错的,无用的,所以这里的一个实际上将帮助人们... - 碧玉

文档:http://jquerymobile.com/demos/1.1.1/docs/api/methods.html

具体来说,你正在寻找reloadPage选项:

reloadPage布尔型,默认值:false)强制重新加载页面,即使它已经在页面容器的DOM中。仅当 changePage()的'to'参数是一个URL时才使用。

所以,像这样将工作:

$.mobile.changePage('/some/url.html', { 
    reloadPage : true 
}); 

您也可以绑定到特定的伪页面pageinit事件,以专门为那些伪网页运行代码:

$(document).delegate('#page-1', 'pageinit', function() { 
    //run code for #page-1 pseudo-page 
}).delegate('#page-2', 'pageinit', function() { 
    //run code for #page-2 pseudo-page 
}).delegate('#page-3', 'pageinit', function() { 
    //run code for #page-3 pseudo-page 
}); 

然后,我建议将整个站点的所有代码放在一个.js文件中,并将其包含在每个文档的任何data-role =“page”或data-role =“dialog”元素的外部或外部。这样,无论用户登陆网站或浏览网站的方式,您网站的代码都将始终存在。

+0

@ Jaspar我可以创建一个JSFiddel的效果,但我从个人经验知道document.ready在$ .mobile.changePage()之后被激发。 – Apollo 2012-08-02 19:48:31

+0

我设置了一个快速示例,显示在jQuery Mobile网站(版本1.1.1)中从一个页面到另一个页面进行导航时引发的事件:http://apexeleven.com/stackoverflow/document-ready/。您会注意到'ready'事件在初始页面加载后未被触发。 – Jasper 2012-08-02 19:57:37

1

在jQuery Mobile中,ajax用于在浏览时将每个页面的内容加载到DOM中,并且DOM就绪处理程序(即,使用$(document).ready()限制的所有事件)仅对第一页执行。要在页面上执行特定事件时,将显示它您可以尝试把这个特定的页面上,

$(document) 
    .unbind("pageshow.somenamespace") 
    .bind("pageshow.somenamespace", 
    function() { 
     // code here 
    } 
);