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 :

Affecter un événement dans une boucle [Google Maps]


Sujet :

APIs Google

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Affecter un événement dans une boucle
    Bonjour,

    J'ai un problème sur Google Map Api.

    J'ai un tableau avec plusieurs polygones représentant divers quartiers. Le code ci-dessous réussit à afficher chaque quartier à l'aide d'une boucle, cependant pour les évènements liés cela ne fonctionne pas.

    En effet je souhaite modifier la couleur du polygone avec la fonction setOptions({fillColor: "#33FF33"}); , qui fonctionne bien quand le polygone n'est pas une ligne d'un tableau.

    Y-a-t-il une erreur dans mon code ? Je tourne en rond....

    Merci pour votre aide


    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
    for (var i = 0, maxi; maxi = quartierCoord[i]; i++) {
     
    PolygoneQuartier[i] = new google.maps.Polygon({
        paths: quartierCoord[i], //Données remplies plus haut dans le code
        strokeColor: '#FF0000',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#FF0000',
        fillOpacity: 0.35,
       nom: quartierNom[i]
      });
    PolygoneQuartier[i].setMap(map);
     
      // EVENEMENTS SUR QUARTIERS
     
      google.maps.event.addListener(PolygoneQuartier[i], 'mouseover',function(event) {
      PolygoneQuartier[i].setOptions({fillColor: "#33FF33"});
    });
     
     
      google.maps.event.addListener(PolygoneQuartier[i], 'mouseout',function(event) {
      PolygoneQuartier[i].setOptions({fillColor: "#FF0000"});
    });
     
      google.maps.event.addListener(PolygoneQuartier[i], 'click',function(event) {
      PolygoneQuartier[i].setOptions({fillColor: "#006aff"});
    });
            }

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    En fait cela marche très bien si je laisse le même code et que j'écris var i=0; par exemple, le problème vient de la boucle...

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 954
    Points : 44 092
    Points
    44 092
    Par défaut
    Bonjour,
    on soucis est bien connu et décrit dans : Pourquoi l'InfoWindow n'affiche rien quand je clique sur le marker ?.

    Pour remédier à cela, outre les méthodes données dans le lien ci-dessus, il en existe une « moderne » avec l'avènement de l'ES6 qui consiste à remplacer var i=0 par let i=0 dans ta boucle for.

    Ressource :
     Déclarer une variable avec let.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Super, merci beaucoup.

    Cela fonctionne dans tous les navigateurs ?

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 954
    Points : 44 092
    Points
    44 092
    Par défaut
    Citation Envoyé par yves51
    Cela fonctionne dans tous les navigateurs ?
    Il faut lire les liens jusqu'au bout et regarder les annotations.

    En substance pour IE11 l'utilisation de let dans une boucle for est « bogguée ».

    Pour voir ce qui se passe il suffit de tester ces quelques lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (let i = 0; i < 5; i += 1) {
        setTimeout(function () {
            console.log(i);
        }, 10)
    }
    le résultat pour tous sauf IE11
    et pour IE11

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

Discussions similaires

  1. [phpToPDF] Problème avec tableau
    Par frutix dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 04/04/2007, 13h10
  2. [Débutant] Problème avec tableau à deux dimensions
    Par beegees dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/12/2006, 14h06
  3. [VB] problème avec tableau
    Par fredeloy dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/05/2006, 17h43
  4. problème avec tableau dynamique
    Par akrobat dans le forum C++
    Réponses: 7
    Dernier message: 28/04/2006, 15h29
  5. problème avec tableau
    Par Kerod dans le forum C
    Réponses: 7
    Dernier message: 13/12/2005, 13h27

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