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 :

Infowindow qui garde la même valeur pour tous les markers [Google Maps]


Sujet :

APIs Google

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut Infowindow qui garde la même valeur pour tous les markers
    Bonjour ,

    j'ai un probleme avec une infowindow,

    j'ai une fonction javascript a laquelle je passe un tableau de données contenant un ensemble d'element, pour chaque je recois un nom et une adresse => il doit placer un marker pour chaque element et l'infowindow adequate au marker

    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
    39
    40
    41
    function findAllAddress(tabStation) {
        clearOverlays();
        var n = tabStation.length;
     
        for (var i = 0; i < n; i++) {
     
            var address = tabStation[i][0];
            var name = tabStation[i][1];
            var info = '<DIV STYLE="line-height:1.35;overflow:hidden;white-space:nowrap;"><DIV STYLE=overflow:auto; width:50px; height:50px><font style="color:#000;"><b>Nom : </b>' + name +
                '<br /><b>Adresse : </b>' + address + '</font></div></div>';
     
            // script uses our 'geocoder' in order to find location by address name
            geocoder.geocode({ 'address': address }, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) { // and, if everything is ok
     
                    // we will center map
                    var addrLocation = results[0].geometry.location;
                    map.setCenter(addrLocation);
     
                    // store current coordinates into hidden variables
                    document.getElementById('lat').value = results[0].geometry.location.$a;
                    document.getElementById('lng').value = results[0].geometry.location.ab;
     
                    // and then - add new custom marker and Infowindow
                    var addrMarker = new google.maps.Marker({
     
                        position: addrLocation,
                        map: map,
                        title: results[0].formatted_address
                    });
                    //
                    var infowindow = new google.maps.InfoWindow({
     
                    content: info
                    });
                    infowindow.open(map, addrMarker);
                    markers.push(addrMarker);
                } 
            });
        }
    }
    tous marche bien, mes markers sont bien placé, mes infowindows sont placés aussi, mon seul probleme c'est que le meme texte s'affiche pour tous les markers qui est toujours celui le dernier dans le tableau

    je declare mon infowindow a chaque fois a l'interieur de la boucle

  2. #2
    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
    Par défaut
    C'est tout à fait logique.

    A chaque itération de ta boucle, tu redéfinis la variable info (entre autres), donc à chaque itération, la valeur est correcte, mais juste le temps de l'itération.
    Or la plupart des fonction GMap sont asynchrones (notamment geocode()), ce qui signifie que le callback sera appelé, en toute vraisemblance, après la fin de la boucle for, ce qui signifie que la valeur des variables utilisées sera celle de la dernière itération.

    Au passage, définir une variable dans une boucle est une mauvaise pratique.

  3. #3
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    J'ai compris mais je définis l'infowindow à l'extérieur de là boucle, le traitement va se faire une seule fois et uniquement pour le dernier élément.

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Bovino t'a tout expliqué mais pour faire rapide tu DOIS attendre le résultat de la fonction "geocode" avant de continuer ta boucle for (ce qu'elle ne fait pas actuellement).

    Une possibilité de faire ceci ce serait de faire d'appeler une autre fonction dans ta boucle for :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function findAllAddress(tabStation) {
            clearOverlays();
     
            for (var i = 0; i < tabStation.length; i++) {
                findAddress(tabStation[i]);
            }
        }

  5. #5
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Merci ca marche maintenant avec la solution de Spartacusply

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] La même valeur pour tous les enregistrements lors de la fermeture d'un formulaire
    Par toutoune95800 dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/04/2012, 14h21
  2. Réponses: 7
    Dernier message: 22/04/2010, 15h45
  3. Réponses: 3
    Dernier message: 13/12/2006, 22h21
  4. La même ip pour tous les connecté du forum!
    Par Grand Hibou dans le forum Langage
    Réponses: 1
    Dernier message: 03/02/2006, 10h23

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