2013-06-08 5 views
0

Я поместил некоторые маркеры для определенных мест на карте, и у меня есть две кнопки, одна из которых позволяет скрыть все маркеры (clearOverlays) и другие, чтобы показать их снова (showOverlays), но это isn ' т работы. В моей консоли JavaScript Я получаю эту ошибку: Cannot call method 'setMap' of undefinedПроблемы скрыть маркер google maps onClick event

Вот мой код ..

// COORDENADAS 
var coordenadas = [ 
    ['Punto 1', 19.558061,-99.296344, 4], 
    ['Punto 2', 19.55886, -99.296886, 5], 
    ['Punto 3',19.559103, -99.296688, 3], 
    ['Punto 4', 19.560164,-99.297347, 2], 
    ['Punto 5',19.560073,-99.296064, 1] 
]; 


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


var ventana = new google.maps.InfoWindow(); 
var marcador, i; 

for (i = 0; i < coordenadas.length; i++) { 
     marcador = new google.maps.Marker 
     ({ 

      position: new google.maps.LatLng(coordenadas[i][1], coordenadas[i][2]), 
      animation: google.maps.Animation.DROP, 
      map: map 

     }); 


     google.maps.event.addListener(
       marcador, 'mouseover', (function(marcador, i) { 
        return function() { 
         ventana.setContent(coordenadas[i][0]); 
         ventana.open(map, marcador); 
        } 
       })(marcador, i) 
     ); 

    } 


function clearOverlays(map) { 
    for (var i = 0; i < coordenadas.length; i++) { 
    marcador[i].setMap(null); 
    }  
    setAllMap(null); 
    console.log('click Ocultar'); 
} 

function showOverlays(map) { 
    for (var i = 0; i < coordenadas.length; i++) { 
    marcador[i].setMap(map); 
    }  
    setAllMap(map); 
    console.log('click Mostar'); 
} 

ответ

1

marcador не является массивом. marcador [i] не существует. Это дает сообщение об ошибке: Cannot call method 'setMap' of undefined

Вам нужен массив объектов google.maps.Marker.

var gmarkers = []; 

function clearOverlays(map) { 
    for (var i = 0; i < gmarkers.length; i++) { 
    gmarkers[i].setMap(null); 
    }  
} 

function showOverlays(map) { 
    for (var i = 0; i < gmarkers.length; i++) { 
    gmarkers[i].setMap(map); 
    }  
} 

for (i = 0; i < coordenadas.length; i++) { 
     var marcador = new google.maps.Marker 
     ({ 
      position: new google.maps.LatLng(coordenadas[i][1], coordenadas[i][2]), 
      animation: google.maps.Animation.DROP, 
      map: map 

     }); 
     gmarkers.push(marcador); 

     google.maps.event.addListener(
       marcador, 'mouseover', (function(marcador, i) { 
        return function() { 
         ventana.setContent(coordenadas[i][0]); 
         ventana.open(map, marcador); 
        } 
       })(marcador, i) 
     ); 
    } 

working example

+0

ooohhhh я вижу, большое спасибо, за помощь и ответ так быстро. Но у меня есть вопрос, я вижу, что вы разделяете код, одна часть - это массив, который я использовал с точками lat и ln, вы добавляете функцию clear и показываете оверлеи и новый аранжировку с именем gmarkes, который является отображением карт google объект, который вы сказали, но я не понимаю его, как это wokrs, потому что gmarkers выглядят как независимый массив, я не вижу отношения для высказывания в некотором роде, я вижу, что вы использовали аргумент «map», и у меня есть карта с именем var в secon блок кода. С уважением – kennechu

+0

Вам нужно позвонить setMap в объект google.maps.Marker. gmarkers - это массив объектов google.maps.Marker. В исходном коде маркадор был ссылкой на последний google.maps.Marker, созданный – geocodezip

Смежные вопросы