2010-11-12 6 views
0

Mon problème est lié à l'utilisation de l'API Google Maps, mais je suis certain qu'il s'agit d'un problème JavaScript général. J'ai un tableau local d'objets définissant une série de marqueurs. Le traitement de ces objets ne pose aucun problème. Mais je veux utiliser une des valeurs dans un gestionnaire d'événements que je crée, et la valeur est toujours "indéfinie" au moment où le gestionnaire d'événements est appelé. (Ce qui est logique, puisque la valeur faisait partie d'un réseau local, mais je ne sais pas comment je peux résoudre ce problème.)Comment puis-je utiliser une variable locale dans un écouteur d'événement?

Le code:

var markers = [ 
    { lat: 58, lng: 07, title: 'Marker 01', url: 'article.aspx' }, 
    .... /* etc */ 
] 
for (var idx in markers) { 
    var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(markers[idx].lat, markers[idx].lng), 
    title: markers[idx].title, 
    map: map 
    }); 
    google.maps.event.addListener(marker, 'click', function() { 
    window.location.href = markers[idx].url; 
    }); 
} 

Lorsque je clique sur un des marqueurs dans la map finale (c'est-à-dire, déclencher l'écouteur 'click'), je suis redirigé vers une page appelée 'undefined', car l'attribut 'url' n'a plus de valeur. Comment puis-je réparer ça?

Répondre

0

Peut-être que vous pouvez passer l'URL à la fonction qui est appelée dans l'addListener

+0

Merci! Ce que je faisais maintenant est ceci: (fonction (m, u) {google.maps.event.addListener (m, 'clic', fonction() {window.location.href = u;})}) (marqueur, marqueurs [idx] .url); Et ça marche! Est-ce vraiment la meilleure façon de le résoudre? – Peter

+0

Je pense que cela peut être mieux si vous essayez de le passer à l'autre fonction (celle de la méthode addListener) –

Questions connexes