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

JavaScript Discussion :

Changer le style des cases d'un tableau quand on clique dessuis


Sujet :

JavaScript

  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 1
    Par défaut Changer le style des cases d'un tableau quand on clique dessuis
    Bonjour,
    Après avoir crée une grille , je voudrais appliquer un listener sur chaque case de la grille: à chaque clic la case devra prendre la couleur jaune
    Mais quand j'essaie d'éxécuter ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var cellules=document.getElementsByClassName("case"); // case étant la classe de toutes les cellules
     for (var k = 0; k < cellules.length; k++)
        { 
        cellules[k].addEventListener("click", function(event){cellules[k].setAttribute('bgcolor','yellow') }, false); 
        }


    ca ne marche pas et ca me sort l'erreur suivante: Uncaught TypeError: Cannot read property 'setAttribute' of undefined

    Quelqu'un pourrait il m'ider svp ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    C'est le cas classique d'une exécution asynchrone à l'intérieur d'un for.

    Quand tu cliques sur une cellule, le code cellules[k].setAttribute('bgcolor','yellow') s'exécute mais à quoi correspond k ? A la dernière valeur qu'il a prise, c'est-à-dire à celle qu'il a à la fin de la boucle for: cellules.length

    On peut passer outre ce problème avec une IIFE mais il y a plus simple ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var cellules=document.getElementsByClassName("case"); // case étant la classe de toutes les cellules
     for (var k = 0; k < cellules.length; k++)
        { 
        cellules[k].addEventListener("click", function(){ this.style.backgroundColor = 'yellow') }, false); 
        }
    et j'ai mis style.backgroundColor car bgcolor est obsolète, on ne fait plus de style en HTML.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    tu peux également passer par la délégation d'événement sur la TABLE directement comme approché dans la discussion Jeux du post it.

Discussions similaires

  1. Comment griser des cases d'un tableau
    Par Barb15 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 5
    Dernier message: 05/11/2009, 13h03
  2. sommes des cases d'un tableau de taille variable
    Par Bubale dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2008, 00h18
  3. Réponses: 4
    Dernier message: 26/07/2007, 13h41
  4. [VB.NET] Changer le style des controles en enabled = false
    Par Ark13 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 04/05/2007, 18h45
  5. changer le style des URL ?
    Par kedare dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 03/05/2007, 05h38

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