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 :

DOM et CSS


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Points : 57
    Points
    57
    Par défaut DOM et CSS
    Bonjour,

    Je crée un outil en javascript pour mon entreprise. On travaille sur IE7.
    C'est tout simplement une liste de checkbox. Je la crée dynamiquement en utilisant une approche objet et j'utilise DOM pour la création des différents éléments.

    Le problème, c'est qu'une fois que j'ai terminé mon arbre après tous les appendChild(), l'objet apparait bien, mais n'est pas affecté par la feuille de style défini pour la page.
    Plus, les balises labels affectées aux inputs ne fonctionnent pas.
    (ça marche sur Firefox par contre...)

    J'arrive à corriger ces erreurs lorsque j'utilise ça en fin de création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.object.innerHTML = this.object.innerHTML;
    Cependant avec cette méthode, les méthodes anonymes de mes events ne fonctionnent plus. Et puis je trouve ça un peu moche.

    Y a t-il une solution (autre que de recopier tout le css dans les attributs "style" des éléments) pour que le css soit appliqué sur mon objet?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Points : 57
    Points
    57
    Par défaut
    Une solution consisterait à faire le innerHTML puis récupérer le composant auquel on veut ajouter un évènement pour lui affecter.
    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
    this.object.appendChild(lblCbList);
    this.object.appendChild(table);
     
    /*
    * Alors, voila le problème, si on ne rajoute pas la ligne si dessous, le css n'est pas appliqué.
    * Si on la rajoute, les évènements ('onclick' par exemple) ne sont plus pris en compte.
    * Sur IE7 (tjs).
    */
    this.object.innerHTML = this.object.innerHTML;
     
    // voila la méthode pour garder les évènements, c'est les mettre en place après le innerHTML
    cbCheckAll = document.getElementById("cbListCheckAll_" + this.id);
    cbCheckAll.refObject = this;
    cbCheckAll.onclick = function()
    {
    	this.refObject.selectAll(this.checked);
    };
    C'est pas vraiment la solution que j'espérais, mais ça fait l'affaire. Enfin bon, à quoi bon utiliser DOM si c'est pour à la fin faire un innerHTML...

    Je mettrais le sujet comme résolu plus tard dans la journée, au cas où vous auriez d'autres solutions, plus intéressantes.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Points : 57
    Points
    57
    Par défaut
    Je corrige ma dernière réponse. Je ne voulais pas que des gens tombent sur mon ancienne solution.

    En fait, IE7 n'a pas trop de soucis avec DOM.
    Si le css ne marchait pas, c'est car on n'écrit pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    input.setAttribute("class", "maClasse");
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    input.setAttribute("className", "maClasse");
    Même chose, pour que les labels fonctionnent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    label.setAttribute("for", "myInput"); // ne marche pas
    label.setAttribute("htmlFor", "myInput"); // marche !
    Du coup, plus besoin d'utiliser innerHTML, et de ce fait, les évènements marchent.

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Oui il faut lire la spec du W3C sur HTML et le DOM

    il existe quelques attributs qui n'ont pas le même nom dans le source HTML que dans le DOM

    de même pour les attributs CSS qui sont des propriétés de l'attribut style dans le DOM n'ont pas le même nom qu'en CSS

    une bonne lecture permet d'éviter ces petits pièges

    A+JYT

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

Discussions similaires

  1. [DOM] Inserer une feuille CSS par Javascript
    Par atar64 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/06/2007, 16h24
  2. [DOM] [XSL] Convertir un fichier XML vers un fichier CSS
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 23/03/2007, 10h49
  3. [CSS, DOM]parcourir un CSS
    Par quidam66 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 23/05/2006, 15h57

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