IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs Google Discussion :

Toujours le meme infowindow


Sujet :

APIs Google

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Toujours le meme infowindow
    Bonjour à tous,

    J'essaye de placer plusieurs points sur une carte avec pour chaque point un titre contenu dans un infowindow.

    Les points sont contenus dans un tableau javascript address et les titres dans un autre tableau appelé nom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    var geocoder;
    var map;
     
    function initialize(address, nom) {
    	geocoder = new google.maps.Geocoder();
    	var latlng = new google.maps.LatLng(46.9,1.56);
    	var myOptions = {
    		zoom: 6,
    		center: latlng,
    		mapTypeId: google.maps.MapTypeId.ROADMAP
    	}
    	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
     
     
     for (i=0; i<address.length; i++) {
      if (geocoder) {
       var contentString = '<div id="content"><h2>'+nom[i]+'</h2></div>';
       var infowindow = new google.maps.InfoWindow({
        content: contentString
       });
     
       geocoder.geocode( { 'address': address[i]}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
         var marker = new google.maps.Marker({
          map: map, 
          position: results[0].geometry.location
         });
     
         google.maps.event.addListener(marker, 'click', function() {
          infowindow.open(map,marker);
         });
        } else {
         alert("Geocode was not successful for the following reason: " + status);
        }
       });
      }
     }
    }
    Mes tableaux sont définis de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var listeNoms = new Array("Titre 1", "Titre 2");
    var listeAdresses = new Array("adresse1", "adresse2");
    Et enfin, ma fonction est appelée sur la propriété onload de body:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="initialize(listeAdresses, listeNoms);">
    Lors de l'affichage de la page, les points sont bien placés mais les infoswindows contiennent les mêmes titres, à savoir le dernier nom contenu dans mon tableau nom. Si je place un alert lors de la définition de l'infowindow, j'ai bien un titre différent à chaque passage de boucle.

    J'avoue ne pas comprendre Avez-vous une explication ?

    Merci

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    C'est un problème de contexte des variables.
    Ton souci vient de cette partie de ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(....) {
        var infoWindow= ...
        ...
        google.maps.event.addListener(marker, 'click', function() {
             infowindow.open(map,marker);
            });
     
    }
    Quand tu passes ta function à addListener, JS introduit une référence à infoWindow pour l'appel du open.
    Or infoWindow est une seule et même variable (ce n'est pas le var infoWindows ... qui change quelque chose. Donc finalement tes fonctions passées à addListener référencent toutes la même variable, dont le contenu est la dernière instance de InfoWindow créée au cours du dernier tour de boucle. D'où ton affichage.

    Voilà tu n'as plus qu'à corriger !

    ERE
    Quand une tête pense seule, elle devient folle.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci pour ta réponse, ce weekend ayant été très chargé en travail, je viens de lire ton message à l'instant.

    J'ai contourné mon problème en utilisant la propriété "info" comme me l'a suggéré un ami.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    markers[i] = new google.maps.Marker({
            position: myLatLng,
            map: map,
            title: ''+i
    });
     
    new google.maps.event.addListener(markers[i], 'click', function() {
          var index = parseInt( (this).getTitle(),10 );
          infowindows[index].open(map,this); 
    });
    Maintenant l'application fonctionne bien mais bien sur la propriété title perd tout son intérêt. C'est pourquoi j'aimerais utiliser ta solution.

    Meme si pour l'instant j'avoue ne pas comprendre ou devoir déclarer ma variable pour produire l'affichage désiré, je vais m'y pencher d'ici peu.

    Un grand merci pour ta réponse. Je mettrais le topic en Résolu lors de mon retour ici

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    Salut,

    C'est un problème de contexte des variables.
    Ton souci vient de cette partie de ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(....) {
        var infoWindow= ...
        ...
        google.maps.event.addListener(marker, 'click', function() {
             infowindow.open(map,marker);
            });
     
    }
    Quand tu passes ta function à addListener, JS introduit une référence à infoWindow pour l'appel du open.
    Or infoWindow est une seule et même variable (ce n'est pas le var infoWindows ... qui change quelque chose. Donc finalement tes fonctions passées à addListener référencent toutes la même variable, dont le contenu est la dernière instance de InfoWindow créée au cours du dernier tour de boucle. D'où ton affichage.

    Voilà tu n'as plus qu'à corriger !

    ERE
    Hum ok mais tu aurais fait comment alors pour eviter cette erreur :/ !
    Dsl mais moi je ne vois pas du tout

    Merci d'avance

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

Discussions similaires

  1. [JpGraph] Toujours le meme graphique qui s'affiche
    Par nialcen dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 20/08/2009, 11h40
  2. Reseau local toujours connecté meme sans cable réseau !?
    Par devlopassion dans le forum Administration
    Réponses: 9
    Dernier message: 27/02/2008, 11h58
  3. j ai toujours la meme erreur 1004?
    Par nouha_79 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/06/2007, 03h44
  4. GList ayant toujours la même valeur
    Par GLDavid dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 18/03/2005, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo