Jquery mobile Jquery Mobile正在加载哪个页面

Jquery mobile Jquery Mobile正在加载哪个页面,jquery-mobile,Jquery Mobile,我的任务是在Jquery Mobile中的pagechange上执行特定的页面javascript(例如在一个页面上定位用户或在另一个页面上显示Google地图) 它真的不清楚如何在页面更改后执行javascript,但我几乎做到了,我能够使用 $(document).bind('pageinit', function(event){ loadGmaps(); geolocate(); }); 但问题是,这段代码在每次页面更改/page init时都会执行,如果我不在带有#

我的任务是在Jquery Mobile中的pagechange上执行特定的页面javascript(例如在一个页面上定位用户或在另一个页面上显示Google地图)

它真的不清楚如何在页面更改后执行javascript,但我几乎做到了,我能够使用

$(document).bind('pageinit', function(event){

    loadGmaps();
    geolocate();

});
但问题是,这段代码在每次页面更改/page init时都会执行,如果我不在带有#map标记的页面上,它只会执行代码,而不执行任何内容。最差的Jquery将加载的页面保留在内存中,但将其隐藏。所以,如果我更改页面,它可以连续16次免费重新加载地图

对于如何在jquery mobile加载的页面中绑定特定的页面javascript,我真的很困惑。我潜伏在网络的各个角落,我相信我不是唯一一个寻找这种特殊技巧的人

谢谢


编辑

我修改了代码以反映Jasper的解决方案,除了地理定位之外,它工作正常:

$(document).on('pageinit', '#wp-post-id-70', function(event){
    geolocate();
});
$(document).on('pageinit', '.wp-post-type-spa', function(event){
    loadGmaps();
});
function geolocate()
{
    if (navigator.geolocation) { 
        navigator.geolocation.getCurrentPosition(
            function(position){
                $('#near_spa').load('?latitude='+position.coords.latitude.toString()+'& longitude='+position.coords.longitude.toString()+' #near_spa > *');
            }
        );
    }else{ 
        alert('Votre navigateur ne supporte pas la géolocalisation ou refuse l\'accès aux données de localisation');
    }
}
地图在我访问的每个spa页面上都加载良好,但当我从新加载的spa页面加载时,如果我单击徽标返回主页,它将加载主页,然后启动“地理定位”功能,但在地理定位方面不会发生任何变化:

$(document).on('pageinit', '#wp-post-id-70', function(event){
    geolocate();
});
$(document).on('pageinit', '.wp-post-type-spa', function(event){
    loadGmaps();
});
function geolocate()
{
    if (navigator.geolocation) { 
        navigator.geolocation.getCurrentPosition(
            function(position){
                $('#near_spa').load('?latitude='+position.coords.latitude.toString()+'& longitude='+position.coords.longitude.toString()+' #near_spa > *');
            }
        );
    }else{ 
        alert('Votre navigateur ne supporte pas la géolocalisation ou refuse l\'accès aux données de localisation');
    }
}
该代码实际上会被调用到navigator.geolocation.getCurrentPosition,但随后会调用pffff,什么都没有。如果我用F5手动重新加载主页,我现在会得到地理位置请求


编辑

不要介意“地图”在每一页上都很好地加载,它不再是了,可能是我和我的大脑太累了

因此,

$(document).on('pageinit', '.wp-post-type-spa', function(event){
    loadGmaps();
});

不再加载地图,是的,我验证过,页面确实有一个wp post类型的spa类…

如果您的代码每个伪页面只运行一次,那么使用
pageinit
事件,该事件在每次将伪页面添加到DOM时只运行一次

您还可以在
bind
调用中针对特定的伪页面:

$(document).on('pageinit', '#some-map-page', function(event){

    loadGmaps();
    geolocate();

});
仅当ID为
some map page
的元素触发
pageinit
事件时,此操作才会运行。例如,您可以在要运行映射代码的每个伪页面元素中添加一个类:

<div data-role="page" id="some-map-page" class="map-page">...</div>

请注意,我使用
.on()
作为委托事件处理程序,这在使用jQuery Mobile时非常有用,因为您无法确定DOM中是否存在伪页面。

如果您的代码每个伪页面只运行一次,则使用
pageinit
事件,每次向DOM中添加伪页面时,它只运行一次

您还可以在
bind
调用中针对特定的伪页面:

$(document).on('pageinit', '#some-map-page', function(event){

    loadGmaps();
    geolocate();

});
仅当ID为
some map page
的元素触发
pageinit
事件时,此操作才会运行。例如,您可以在要运行映射代码的每个伪页面元素中添加一个类:

<div data-role="page" id="some-map-page" class="map-page">...</div>

请注意,我使用
.on()
作为委托事件处理程序,这在使用jQuery Mobile时非常有用,因为您永远无法确定DOM中是否存在伪页面。

pageinit是否应该位于内部?我的集成员让我把它放在页脚,这样它就在div之外了now@MathieuDumoulin它可以住在任何地方。我建议将所有这类JS放在一个中心包含文件中,然后将该文件包含在每个HTML文档中。这样,无论用户如何进入您的站点,代码都将始终可用。@MathieuDumoulin我必须查看您的站点才能真正提供帮助。但请确保您没有使用id,因为该元素一次可以存在于多个伪页面上,这会使您看起来好像什么都没有发生,但实际上选择了错误的元素。不,至少对于id来说一切正常,每个数据角色=页面的id为“wp post id xyz”在wordpress中匹配帖子id,据我所知,我可以重用类,那么为什么“.wp post-type spa”没有启动?@MathieuDumoulin如果你在网站上发布URL,我可以给出一些更具体的反馈。特别是对于WordPress网站,有太多可能的问题需要盲目地处理。pageinit是否应该在内部?我的集成员让我把它放在页脚,这样它就在div之外了now@MathieuDumoulin它可以住在任何地方。我建议将所有这类JS放在一个中心包含文件中,然后将该文件包含在每个HTML文档中。这样,无论用户如何进入您的站点,代码都将始终可用。@MathieuDumoulin我必须查看您的站点才能真正提供帮助。但请确保您没有使用id,因为该元素一次可以存在于多个伪页面上,这会使您看起来好像什么都没有发生,但实际上选择了错误的元素。不,至少对于id来说一切正常,每个数据角色=页面的id为“wp post id xyz”在wordpress中匹配帖子id,据我所知,我可以重用类,那么为什么“.wp post-type spa”没有启动?@MathieuDumoulin如果你在网站上发布URL,我可以给出一些更具体的反馈。尤其是在WordPress网站上,有太多的可能的问题需要盲目地处理。