Маркеры GoogleMap нельзя нажимать на мобильных устройствах

GoogleMap Маркеры недоступны для нажатия на мобильных устройствах (сенсорных экранах).
Но это нормально на любом ПК, поэтому я не могу понять, в чем смысл.
Вот мой код :

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 для "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);
    });

person 夏期劇場    schedule 24.01.2012    source источник


Ответы (2)


Проблема в том, что вы выполняете цикл, вам нужно использовать замыкание, иначе все маркеры просто получат контент, который вы хотите связать с последним маркером. Ваш первый фрагмент кода делает это правильно. Предлагаю вам сделать то же самое снова:

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));
person duncan    schedule 25.01.2012

Я нашел следующее решение: 1. создать маркер с опцией

"optimized: false" : ex => new google.maps.Marker({..., optimized: false, ...});
  1. добавление еще одного прослушивателя событий

google.maps.event.addDomListener(marker, "click", function() {...});

Из форума Google

person serj    schedule 02.10.2015