Jquery mobile JQuery Mobile-后退和前进浏览器按钮触发pageinit事件

Jquery mobile JQuery Mobile-后退和前进浏览器按钮触发pageinit事件,jquery-mobile,Jquery Mobile,在我的网站上,我看到在浏览器的前进按钮选择过程中调用pageinit。这是正确的吗。这不会两次绑定已注册的事件 First.html          测试1                                                                      刷卡1               Second.html 测试2 jquerymobile www.jboss.org/developer third.

在我的网站上,我看到在浏览器的前进按钮选择过程中调用pageinit。这是正确的吗。这不会两次绑定已注册的事件

First.html


    
    
测试1
        
        
        
        
        
        
    
    
    
        
刷卡1
         
        
    
Second.html


测试2
jquerymobile
www.jboss.org/developer
third.html


jQuery移动模板
jquerymobile
www.jboss.org/developer
common.js

$(文档).on('pageinit',“#first”,函数(事件){
控制台日志(“第一”);
});
$(文档).on('pageinit',“#second”,函数(事件){
控制台日志(“第二”);
});
$(文档).on('pageinit',“#third”,函数(事件){
控制台日志(“第三”);
});

你能检查一下上面的代码并告诉我为什么每次都调用pageinit吗

编辑:
似乎在使用多页模板方法(包含所有页面的单个html)时,会触发一次
pageinit
,因为页面加载到DOM中,并且在页面之间转换时保持不变

但是,当使用多个页面并在Ajax中导航时,您会注意到这些页面包含一个属性
data external page=“true”
,第一个页面除外。即使使用DOMCHACHE false,第一页也始终缓存在DOM中。但是,除了第一页之外的其他页面在您离开后会被加载并清理掉。这就是为什么点击后退/前进按钮时会触发
pageinit

domCache设置在用户离开页面后是否将页面保留在DOM中。你可以在网上看到。默认情况下,domCache选项的值为false

添加:

$(document).on('mobileinit', function () {
    $.mobile.page.prototype.options.domCache = true;
});
在jQuery js和jQuery Mobile js之间,页面将被缓存在DOM中。因此,pageinit不会启动

另一种方法是在锚点上添加
datadomcache=“true”

使用domCache的缺点是DOM可能很大,导致内存问题。在这种方法中,DOM管理由开发人员负责

最后,确保在页面中使用相同的jQ、jQM版本。前两页使用jQ 1.9.1、jQm 1.3.1,第三页使用jQ 1.7.1、jQm 1.1.0。这与具体问题无关,但值得一提

我希望这能有所帮助。

Intro 在讨论页面事件之前,我们需要先讨论jQuery移动页面体系结构。jQuery移动应用程序可以通过两种不同的方式创建:多页面模板或多个HTML页面

不同的jQuery移动页面体系结构 多页模板 在这种模板中,所有内容都加载到
DOM
中。无论用户从一个页面切换到另一个页面多少次,上一个页面都将保持加载到
DOM
。虽然这是页面之间平滑过渡的最佳解决方案,但它可能会加重DOM的负担。这在桌面浏览器上通常不是问题,但移动浏览器可能会受到影响,尤其是在低端设备上

多HTML模板 此模板解决方案需要几个
HTML
页面。对于大型移动应用程序的构建来说,这是一个很好的选择,但有一个陷阱。与多页模板不同,每次访问页面时,它都会加载到
DOM
。在速度较慢的设备上,它可能会导致转换问题,特别是当目标页面较大时。这可以通过页面预取来解决,jQuery Mobile在加载主页并且触发
pagecreate
事件后在后台加载目标页面
但是
还有另一个大问题,jQuery移动文档中没有充分描述这一点。在页面转换期间,上一页将从
DOM
中删除。这样做是为了防止内容在
DOM
中累积。这也可以通过另一个名为:

data-dom-cache="true"
或通过初始化全局参数:

$.mobile.page.prototype.options.domCache = true;
页面体系结构如何影响页面事件 jQuery Mobile有多个页面事件(有关它的更多信息,请参见)。他们在这里介绍整个页面加载/转换过程。高级jQuery移动用户知道使用
pageinit
事件,而不是jQuery经典
文档就绪
事件。就像
文档就绪
一样,
pageinit
在页面初始化期间仅触发一次

但是有一个问题,
pageinit
DOM
内的页面初始化过程中只会触发一次。如果从
DOM
(在多HTML模板中)中删除页面并再次加载
pageinit
将触发