Google地图标记在移动设备上无法点击

时间:2012-01-24 20:03:39

标签: google-maps mobile geolocation google-maps-markers infowindow

GoogleMap 标记在移动设备上无法点击(触摸屏) 但是,在任何PC上都可以,所以我无法弄清楚有什么意义 这是我的代码:

var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 10,
    center: new google.maps.LatLng(60.037760, -44.100494),
    mapTypeId: google.maps.MapTypeId.ROADMAP
});

var locations = [
                    ['4lvin', 60.074433, -44.011917],
                    ['5irius', 60.037760, -44.100494]
                ];

for (var i = 0; i < locations.length; i++) {
    var marker = new google.maps.Marker({
        position: new google.maps.LatLng(locations[i][1], locations[i][2]),
        map: map
    });

    var infowindow = new google.maps.InfoWindow();

    google.maps.event.addListener(marker, 'click', (function(marker, i) {
        return function() {
            infowindow.setContent('<h2>'+locations[i][0]+'</h2>\n<a>Read more..</a>');
            infowindow.open(map, this);
        }
    })(marker, i));
}


但是,当我使用以下代码(谷歌的正式方式为“google.maps.event.addListener”)时, 标记 只显示相同的 信息窗口

    var infowindow = new google.maps.InfoWindow({content: locations[i][0]});
    new google.maps.event.addListener( marker, 'click', function() {
        infowindow.open(map,this);
    });

2 个答案:

答案 0 :(得分:1)

问题是因为你正在做一个循环,你需要使用一个闭包,否则所有标记只会获得你想要与最后一个标记关联的内容。你的第一段代码是正确的。建议你改变再做同样的事情:

var infowindow = new google.maps.InfoWindow({content: locations[i][0]});
google.maps.event.addListener( marker, 'click', function(marker, i) {
  return function() {
    infowindow.setContent(locations[i][0]);
    infowindow.open(map,this);
  }
})(marker, i));

答案 1 :(得分:1)

我找到了以下解决方案: 1.使用选项

创建标记
"optimized: false" : ex => new google.maps.Marker({..., optimized: false, ...});
  1. 添加另一个事件监听器
  2. google.maps.event.addDomListener(marker, "click", function() {...});

    enter image description here