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 :

document.getElementById() is null


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Par défaut document.getElementById() is null
    Bonjour,
    j'ai les deux fonctions suivantes :
    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
     
    create: function (num, val)
        {
            const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
     
            var i = document.createElementNS(XUL_NS, "treeitem");
            var r = document.createElementNS(XUL_NS, "treerow");
            var c1 = document.createElementNS(XUL_NS, 'treecell');
            var c2 = document.createElementNS(XUL_NS, 'treecell');
            var c3 = document.createElementNS(XUL_NS, 'treecell');
     
            i.setAttribute("container", true);
            i.setAttribute("open", true);
     
            c1.setAttribute("label", num);
            c2.setAttribute("label", val);
            c3.setAttribute("value", false);
     
            r.appendChild(c1); 
            r.appendChild(c2);
            r.appendChild(c3);
     
            i.appendChild(r);
     
            return i;
        }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    fonction: function (liste){
            try{
                root = document.getElementById("treeScenariosRoot"); //Element créé dans le code html
                for(o in liste){
    	 	root.appendChild(create(liste[o].id, liste[o].name));
                    document.getElementById(liste[o].id).addEventListener("click", alert("Banane"), false);
    	    }                        
            }
            catch(e){ alert(e); }	
    }
    J'obtiens un message d'erreur me disant que
    document.getElementById(...) is null
    et je ne vois pas d'où ça peut venir. Je n'arrive pas à accéder à mes éléments.
    L'erreur peut sembler simple, je début en javascript

  2. #2
    Membre très actif
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById(liste[o].id).addEventListener("click", alert("Banane"), false);
    C'est moi ou tu as mis la lettre o, liste[o] me semble bizarre non ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Par défaut
    Oui c'est bien la lettre o, je parcours ma liste et j'essaie d'ajouter un eventListener sur chaque élément créé.

    Dans tous les cas que j'ai pu voir sur internet, on faisait un getElementById sur un élément prédéfini dans le code html. Or dans mon cas il s'agit d'un élément créé grâce à ma fonction create mais qui n'est pas explicitement défini dans le code html cela aurait-il un rapport ?

  4. #4
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Heu... tu te mélanges un peu les pédales là...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById(liste[o].id)
    pourquoi pas, mais si
    il s'agit d'un élément créé grâce à ma fonction create
    je ne vois pas dans ta fonction create() à quel endroit tu attribues un id !
    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

  5. #5
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Et pourquoi ne pas attacher l'événement dans la fonction create ? A la création des éléments directement !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Par défaut
    Ah oui effectivement...
    C'est exactement ce que j'allais proposer kaamo ^^
    J'ai essayé de rajouter cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i.addEventListener("click", alert("Banane"), false);
    Le soucis c'est que ma boîte d'alerte avec "Banane" s'affiche toute seule chaque fois qu'un élément est créé sans pour autant que j'ai cliqué sur un élément.

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 205
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById(liste[o].id).addEventListener("click", alert("Banane"), false);
    pourquoi ne pas mettre directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    liste[o].onclick = function(){
      alert('Banane');
    };
    ou alors il y a un truc que je n'ai pas compris!

    Ce qui me surprend c'est effectivement le root.appendChild(create(liste[o].id, liste[o].name));, il semblerait donc que liste[o] n'est pas un élément DOM.

  8. #8
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Le soucis c'est que ma boîte d'alerte avec "Banane" s'affiche toute seule chaque fois qu'un élément est créé sans pour autant que j'ai cliqué sur un élément.
    Il faut l'encapsuler dans une fonction anonyme. Comme le suggère @NoSmoking.

    Dans la fonction create direcement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    i.onclick = function(){
      alert('Banane');
    };

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Par défaut
    Avec le onclick je n'ai plus la boîte d'alerte à chaque création d'élément mais je n'ai pas de réaction au clic. C'est peut être une piste, je vais essayer de voir ça.

    En fait liste contient la réponse à une reqûete json sous forme d'un tableau.

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

Discussions similaires

  1. [AJAX] document.getElementById() is null
    Par nicocooper dans le forum AJAX
    Réponses: 2
    Dernier message: 31/03/2011, 00h16
  2. document.getElementById retourne null
    Par gabdeschenes dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/10/2009, 08h45
  3. [DOM] document.getElementById is null
    Par camyo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/06/2009, 07h24
  4. Erreur : document.getElementById('image').src is NULL
    Par CKLOL dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/05/2009, 10h56
  5. La fonction document.getElementById retourne NULL
    Par zaineb.z dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/05/2008, 18h09

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