Jquery mobile Google将javascript api V3和jQuery Mobile添加的点击事件映射到标记,但当您返回缓存页面时,这些事件不起作用

Jquery mobile Google将javascript api V3和jQuery Mobile添加的点击事件映射到标记,但当您返回缓存页面时,这些事件不起作用,jquery-mobile,google-maps-api-3,google-maps-markers,infowindow,Jquery Mobile,Google Maps Api 3,Google Maps Markers,Infowindow,网址如下: 在我使用jQuery mobile生成的后退按钮/浏览器后退按钮返回页面后(在从其中一个标记中单击“获取方向”链接后),我的信息窗口不起作用 认为这是jqm的问题,我将整个映射初始化分解为几个函数,然后在返回页面时再次运行click event delegator。在添加侦听器之前,我使用了一个隐藏的输入字段来侦听是否加载了映射。我发现返回页面时jqm页面事件pageshow没有触发,因此我将函数附加到beforepageshow。这是发射,但标记信息窗口仍然无法返回 该网站说,我的

网址如下:

在我使用jQuery mobile生成的后退按钮/浏览器后退按钮返回页面后(在从其中一个标记中单击“获取方向”链接后),我的信息窗口不起作用

认为这是jqm的问题,我将整个映射初始化分解为几个函数,然后在返回页面时再次运行click event delegator。在添加侦听器之前,我使用了一个隐藏的输入字段来侦听是否加载了映射。我发现返回页面时jqm页面事件pageshow没有触发,因此我将函数附加到beforepageshow。这是发射,但标记信息窗口仍然无法返回

该网站说,我的问题似乎是主观的,可能会被关闭,不管这意味着什么

这是我的地图代码:

initLocsMap();
bounds = new google.maps.LatLngBounds();
addMapMarkers();
bounds.extend(userPos);
map.fitBounds(bounds);
infowindow = new google.maps.InfoWindow();
$('#map_loaded').val('loaded').trigger('change');
reportClosest();

var geocoder;
var map;
var markers = [];
var userPos;
var infowindow;
var bounds;

// create map with user position marked at center
function initLocsMap()
{
    userPos = new google.maps.LatLng(user_lat, user_long);
    var options = 
    {
        zoom: 16,
        center: userPos,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map(document.getElementById("map_canvas_home"), options);

    // set user marker
    var userMarker = new google.maps.Marker(
    {
        position: userPos,
        map: map,
        icon: 'https://maps.gstatic.com/mapfiles/ms2/micons/ylw-pushpin.png'
    });
}

// add several markers to map and extend bounds
function addMapMarkers()
{
    for (var i = 0; i < locData.locsLength(); i++)
    {
        var point = new google.maps.LatLng(locData.getByKey(i,'lat'), locData.getByKey(i,'long'));
        markers[i] = new google.maps.Marker({
            position: point,
            map: map
        });
        bounds.extend(point);
    }
}

function addMapInfoWindows()
{
    alert('add info windows');
    for (var i = 0; i < locData.locsLength(); i++)
    {
        var marker = markers[i];
        google.maps.event.addListener(marker, 'click', (function(marker, i) 
        {
            return function() 
            {
                var address = locData.getByKey(i,'address');
                var ad1ad2 = address.split(', ');
                var ad1 = (ad1ad2.shift());
                var ad2 = (ad1ad2.join(', '));
                infowindow.setContent(locData.getByKey(i,'full_name')+"<br>"+ad1+"<br>"+ad2+"<br>"+locData.getByKey(i,'duration_text')+' - '+locData.getByKey(i,'distance_text')+"<br>"+"<a href=\"directions.php?location="+locData.getByKey(i,'name')+"\">Get Directions</a>");
                infowindow.open(map, marker);
            }
        })(marker, i));
    }
}

$(document)./*off('pageinit', '#home').*/on('pagebeforeshow', '#home', function(event)
{
    alert('pagebeforeshow');
    if ($('#map_loaded').val() == 'loaded')
    {
        alert('loaded');
        addMapInfoWindows();
    }
    else
    {
        $('#map_loaded').change(function()
        {
            alert('change');
            addMapInfoWindows();
        })
    }
})
initLocsMap();
bounds=新的google.maps.LatLngBounds();
addMapMarkers();
扩展(userPos);
映射边界(bounds);
infowindow=new google.maps.infowindow();
$('#map_loaded').val('loaded').trigger('change');
报告最近的();
var地理编码器;
var映射;
var标记=[];
var-userPos;
var信息窗口;
var界;
//创建用户位置标记在中间的地图
函数initLocsMap()
{
userPos=new google.maps.LatLng(user\u lat,user\u long);
变量选项=
{
缩放:16,
中心:userPos,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById(“map\u canvas\u home”),选项);
//设置用户标记
var userMarker=new google.maps.Marker(
{
位置:userPos,
地图:地图,
图标:'https://maps.gstatic.com/mapfiles/ms2/micons/ylw-pushpin.png'
});
}
//添加几个标记以映射和扩展边界
函数addMapMarkers()
{
对于(var i=0;i”+ad1+“
”+ad2+“
”+locData.getByKey(i,'duration_text')+“-”+locData.getByKey(i,'distance_text')+”
“+”; 信息窗口。打开(地图、标记); } })(marker,i)); } } $(文档)。/*关闭('pageinit','#home').*打开('pagebeforeshow','#home',函数(事件) { 警报(“pagebeforeshow”); if($('#map_loaded').val()=='loaded') { 警报(“已加载”); addMapInfo窗口(); } 其他的 { $('#map_loaded')。更改(函数() { 警报(“变更”); addMapInfo窗口(); }) } })
以防万一,任何人都会遇到同样的问题……我正在链接到第二个页面,该页面上也有谷歌地图。创建第二页上的映射后,我的第一个映射将被覆盖,因为我对这两个映射使用了相同的变量名(map)。所以我所要做的就是更改其中一个变量的名称。这是因为我在jquery mobile中使用ajax导航,两个地图需要同时在dom中。哦,这个网站警告说,这篇文章可能会被关闭,因为它看起来太主观了。很好的检测麻木的算法。