2012-03-06 10 views
4

Il existe une telle fonction. Cela fonctionne, pas de problème.InfoWindow dans api google maps javascript v3

function setIconsOnMap(arrIcons, pathIcon){ 
    var arrLatLng=Array(); 
    var markers=Array(); 
    var infowindow=Array(); 
    for (var i=0; i<arrIcons.length; i++){ 
    arrLatLng[i]=new google.maps.LatLng(arrIcons[i]['geo lat'], 
     arrIcons[i]['geo lon']); 
    } 
    for (i=0; i<arrLatLng.length; i++){ 
    markers[i]=new google.maps.Marker({ 
     position: arrLatLng[i], 
     map: map 
    }); 
    markers[i].setIcon(pathIcon); 
    infowindow[i]=new google.maps.InfoWindow({ 
     content: 'uuuu' 
    }); 
    google.maps.event.addListener(markers[i], 'mouseover', function(){  
     alert('sss'); 
    }); 
    } 
} 

http://clip2net.com/s/1FtrV

http://clip2net.com/s/1Ftrp

Mais si je tente de montrer InfoWindow au lieu d'alerte(), la fonction ne fonctionne pas.

function setIconsOnMap(arrIcons, pathIcon){ 
    var arrLatLng=Array(); 
    var markers=Array(); 
    var infowindow=Array(); 
    for (var i=0; i<arrIcons.length; i++){ 
    arrLatLng[i]=new google.maps.LatLng(arrIcons[i]['geo lat'], 
     arrIcons[i]['geo lon']); 
    } 
    for (i=0; i<arrLatLng.length; i++){ 
    markers[i]=new google.maps.Marker({ 
     position: arrLatLng[i], 
     map: map 
    }); 
    markers[i].setIcon(pathIcon); 
    infowindow[i]=new google.maps.InfoWindow({ 
     content: 'uuuu' 
    }); 
    google.maps.event.addListener(markers[i], 'mouseover', function(){  
     infowindow[i].open(map, markers[i]); 
    }); 
    } 
} 

S'il vous plaît donner un indice moi où mon erreur est.

Répondre

4

Si je ne me trompe pas vos tableaux sont hors de portée lorsque l'événement mouseover est déclenché, mis infowindow en tant que propriété marqueur et vous devriez être bien (aussi des tableaux devraient être déclarés globalement pour référence ultérieure)

var arrLatLng=Array(); 
var markers=Array(); 
function setIconsOnMap(arrIcons, pathIcon){ 
    for (var i=0; i<arrIcons.length; i++){ 
    arrLatLng[i]=new google.maps.LatLng(arrIcons[i]['geo lat'], 
     arrIcons[i]['geo lon']); 
    } 
    for (i=0; i<arrLatLng.length; i++){ 
    markers[i]=new google.maps.Marker({ 
     position: arrLatLng[i], 
     map: map 
    }); 
    markers[i].setIcon(pathIcon); 
    markers[i].infoWindow=new google.maps.InfoWindow({ 
     content: 'uuuu' 
    }); 
    google.maps.event.addListener(markers[i], 'mouseover', function(){  
     this.infoWindow.open(map, this); 
    }); 
    } 
} 
+0

OUI !!! Tu as raison. Ça marche. Merci beaucoup. – serg

+0

Bonjour la Pologne de l'Ukraine :) – serg

2
function setIconsOnMap(arrIcons, pathIcon){ 
    var arrLatLng=Array(); 
    var markersArray = Array(); 
    var infowindowArray = Array(); 
    for (var i=0; i<arrIcons.length; i++){ 
    arrLatLng[i] = new google.maps.LatLng(arrIcons[i]['geo lat'], 
    arrIcons[i]['geo lon']); 

    markers = new google.maps.Marker({ 
     position: arrLatLng[i], 
     map: map 
    }); 
    markers.setIcon(pathIcon); 
    markersArray[i] = markers; 
    infowindow = new google.maps.InfoWindow({ 
     content: 'uuuu' 
    }); 

    google.maps.event.addListener(markers , 'mouseover', function(){  
     infowindow.open(map, markers); 
    }); 
    infowindowArray[i] = infowindow; 
    } 
} 

essayez ce code. Ça va marcher.

+0

Il doesn ne fonctionne pas tout de même. – serg

+0

http://178.162.248.149/~sergc578/google-maps-1/index.php – serg

+0

Cette fonction est dans le fichier: all.js – serg

1

Vous ne savez pas exactement ce que vous essayez de faire. Vous n'avez vraiment besoin de configurer qu'un seul infowindow et de charger dynamiquement le contenu au passage de la souris.

Vous avez seulement besoin d'utiliser un marqueur et de définir l'écouteur à chaque fois.

Vous pouvez essayer ce qui suit mais je ne suis pas entièrement sûr de ce que vous essayez de faire avec votre code.

google.maps.event.addListener(markers[i], 'mouseover', (function(event, index){ 
    return function(){ 
    infowindow.content = infowindowArray[index]; 
    infowindow.open(map,this); 
    } 
}); 

This link peut vous être utile.

1

Cet écouteur

google.maps.event.addListener(markers[i], 'mouseover', function(){  
     infowindow[i].open(map, markers[i]); 
    }); 

exécute cette fonction lorsque l'événement se produit. Donc, vous cliquez sur un marqueur, et l'API exécute la fonction et tente d'ouvrir infoWindow[i] sur marker[i]. Au moment de l'exécution, soit i est hors de portée, soit la dernière valeur de la boucle. La manière correcte de lier les fenêtres infoWindows aux marqueurs est d'utiliser une fonction d'assistance - généralement appelée createMarker() - comme code demonstrated in Larry's port of Mike Williams'.