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 :

Plusieurs addEventListener, seul le dernier fonctionne


Sujet :

JavaScript

  1. #21
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Tu aurai pu faire un peu plus court, mais c'est pas grave.

    Ton problème est le suivant:

    tu utilise liste.innerHTML += "....";

    ce qui se traduit par liste.innerHTML = liste.innerHTML + "....";

    Donc tu relis le contenu html de liste sous forme de chaine, tu ajoute le nouveau
    code et tu écrase le innerHTML à nouveau.

    Dans cette opération tu perds les noeuds dom sur lesquels tu as assigné
    tes évènements, de nouvelles instances sont recrées à partir de la chaine.

    Seule la dernière assignation d'évènement subsiste.

    Tu devrais plutôt utiliser document.createElement et createTextNode pour
    fabriquer tes inputs, ton texte et ton br

    et surtout liste.appendChild(...) à chaque fois, ainsi tu ajoute au dom sans
    supprimer les éléments déjà crées.

  2. #22
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Mince...honnêtement je fermais les yeux sur le innerHTML car véritablement dans mon code j'ai plusieurs DIV et classes CSS qui m'imposent pas mal de createElement de setAttribute en tout genre etc... (un code beaucoup plus long donc) et comme j'étais pressé je suis passé par un innerHTML ne pensant pas sur le coup que ça perturberait les choses.

    Au final j'ai perdu plus de temps avec cette foutue innerHTML...ça m'apprendra.

    Merci.

  3. #23
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1

  4. #24
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Je confirme que c'est OK avec les DOMs, merci Marcha...

    Intéressant ton dev SpaceFrog, je vais me pencher la dessus dès que possible.

    De mon côté, c'était vraiment de la "feignasserie" car j'ai codé le tout en DOM en qlq minutes... J'ai horreur d'être comme ça mais c'est de famille (vive les Bretons !)

    Avouez que c'est tentant le innerHTML pour faire court...voici le code qui remplace la ligne de code fautive :

    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
     
    var _DIV = document.createElement("DIV");	_DIV.className="container_rc";			_DIV.setAttribute('onmouseover','this.style.backgroundColor=\'#fff\';');_DIV.setAttribute('onmouseout','this.style.backgroundColor=\'#f5f5f5\';');
    var _TABLE = document.createElement("TABLE");
    var _TBODY = document.createElement("TBODY");
    var _TR = document.createElement("TR");
    var _TD1 = document.createElement("TD");
    _TD1.style.width = "20px";
    _TD1.className = "c";									
    try{  
    	_RAD = document.createElement('<input type="radio" name="chp_code" value="'+code+'" />');  
    }catch(bug){  
    	_RAD = document.createElement('input');  
    	_RAD.setAttribute('type','radio');  
    	_RAD.setAttribute('name','chp_code'); 
    	_RAD.setAttribute('value',code);
    }  
    	_RAD.id = code_relais; 
    	_RAD.code = code;
    	_RAD.valeur= valeur;
     
    	addEvent(_RAD,"click", function () {
    		alert(code+" "+valeur);
    	}, false);
     
    	_TD1.appendChild(_RAD);
           var _TD2 = document.createElement("TD");
    	_TD2.innerHTML = "<span style=\"font-weight:bold\">"+code_relais+"</span><br />"+code+" - "+valeur+"</div><div class=\"clear\">";
    	_TR.appendChild(_TD1);
    	_TR.appendChild(_TD2);
    	_TBODY.appendChild(_TR);
    	_TABLE.appendChild(_TBODY);
     
    	liste.appendChild(_TABLE);

  5. #25
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    speedev, tu devrais t'intéresser à des Framework si tu aimes vraiment
    la "feignasserie" :-)

    Deux d'entre eux devraient t'aider si tu fais beaucoup de choses
    similaires à ton post.

    Ma préférence pour celui-ci: Jquery
    ou prototype suivant les goûts.

  6. #26
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Oui Marcha
    Mais à vrai dire, c'est plutôt les plannings serrés qui me font choisir des raccourcis à tord plutôt que de la vraie feignantise. Je ne suis pas adepte des frameworks mm si j'utilise prototype de temps à autre pour des petits gadgets rigolos.
    J'ai encore trop de mal à vouloir standardiser ma façon de développer au moyen d'outils tous beaux tous propres que tout le monde connait. Mais je pense que j'y viendrai...comme beaucoup d'autres....

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/02/2010, 11h58
  2. Réponses: 0
    Dernier message: 01/07/2009, 10h40
  3. VHOST Seule la premiere fonctionne
    Par Guillomme dans le forum Apache
    Réponses: 2
    Dernier message: 07/03/2008, 14h43
  4. [DOM] Seul le dernier élément est affiché
    Par COLOMBAT dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 21/12/2007, 18h12
  5. Réponses: 6
    Dernier message: 15/03/2007, 10h29

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