2012-06-27 12 views
5

GMaps v3 marcadores AddListener ProblemaGMaps v3 marcadores AddListener conseguir siempre el último índice variable en el bucle for

Estoy intentando añadir al pasar el ratón/mouseout detector de eventos a mis marcadores, pero me da Allways el último valor de la for loop En todos los eventos, parece obtener el último valor de for for the current. Aquí está mi código

for(mark in data) { 
    markers[mark] = new google.maps.Marker({ 
       position: new google.maps.LatLng(data[mark].lat,data[mark].lng), map: map, 
      }); 
google.maps.event.addListener(markers[mark], "mouseover", function() { 
       alert(mark); 
      }); 
      google.maps.event.addListener(markers[mark], "mouseout", function() { 
       alert(mark); 
      }); 
     } 

El resultado es una alerta sobre el puntero del ratón sobre/fuera con el mismo valor para todos los 10 marcadores y esperaba la Identificación del marcador en cada alerta.

gracias Saludos

Respuesta

10

El problema que tiene es el valor de la marca es global y se ajuste la izquierda en el último valor en el bucle. El problema se puede solucionar con un cierre de función. Creo que esto funcionará (no probado):

function createMarker(latlng, id) 
{ 
    var marker= new google.maps.Marker({ 
      position: latlng, map: map, 
      }); 
    google.maps.event.addListener(marker, "mouseover", function() { 
      alert(id); 
      }); 
    google.maps.event.addListener(marker, "mouseout", function() { 
      alert(id); 
      }); 
    return marker; 
} 
for(mark in data) { 
    markers[mark] = createMarker(new google.maps.LatLng(data[mark].lat,data[mark].lng), 
           mark); 
} 
+0

¡Tienes toda la razón! – Santiago

Cuestiones relacionadas