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]ordre des appels DOM et visualisation selon les navigateurs


Sujet :

JavaScript

  1. #1
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut [DOM]ordre des appels DOM et visualisation selon les navigateurs
    Bonjour à tous. J'ai un petit souci avec IE qui, comme d'hab', a implémenté son propre comportement sur les actions DOM.

    Exemple : je cherche à insérer des noeuds cases à cocher, éventuellement cochées, dans un bloc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	var f = document.getElementById( "f" );
    	b = document.createElement( "input" );
    	b.setAttribute( "type", "checkbox" );
    	b.checked = true; // A --> si on le fait avant le appendChild, ça ne marche pas sur IE
    	f.appendChild( b );
    	f.appendChild( document.createTextNode( "Blablabla" ) );
    	b.checked = true; // B --> si on le fait après le appendChild, ça marche aussi sur IE !!
    Les commentaires dans le code situent le problème. Si un élément n'est pas encore inséré dans l'arbre DOM du document, IE n'affichera pas les modifications que l'on fait subir à ses attributs. Pour voir l'effet d'un règlage dynamique d'un attribut, il faut donc avoir inséré l'élément au prélable.

    Pour cet exemple, ce n'est pas bien gênant. Cependant, dans d'autres cas, ça simplifierait nettement mon code de pouvoir faire les choses dans un ordre ou dans l'autre, ainsi que m'y autorisent Opera ou Firefox.

    Deux questions par conséquent :
    1 - qui a raison du point de vue de la norme ?
    2 - existe-t-il un moyen (une fonction javascript) pour forcer IE à mettre à jour son affichage [[[ ici : à montrer la case cochée même si on n'a pas fait le deuxième
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	b.checked = true; // B --> si on le fait après le appendChild, ça marche aussi sur IE !!

  2. #2
    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 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b = document.createElement( "<input type='checkbox' checked />");
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Citation Envoyé par SpaceFrog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b = document.createElement( "<input type='checkbox' checked />");
    Pas standard ^^

    Euh ouais bein, encore un caprice de Môssieu IE

  4. #4
    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 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var b 
    if (document.all){b=document.createElement( "<input type='checkbox' checked />")}
    else{b=document.createElement('input');
           b.type=input;
           b.checked=true;}
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    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
    as tu essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b.setAttribute( "checked", "checked");
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b.setAttribute( "checked", true);
    mais il me semble qu'il y a le même be avec l'attibut selected dans les options d'un select.

    A+JYT

  6. #6
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    @SpaceFrog : c'est une solution de contournement, mais peu satisfaisante dans mon cas car elle oblige à règler tous les attributs en même temps.

    @Sekaijin : oui, j'ai testé ces variantes. Elles marchent bien sous Opera et Firefox, c'est toujours IE qui résiste. Pour une compatibilité entre tous ces navigateurs, c'est donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    htmlElem.checked = true / false
    que j'utilise.

    Cela dit, la question de forcer un navigateur à afficher les mises à jour sans recharger la page (un refresh sans reload en somme...) n'est pas résolue. Mais je crains fort qu'elle ne puisse l'être car je ne trouve aucun indice dans ce sens. Tant pis...

  7. #7
    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 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    il ne te reste plus qu'a faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (document.all){
                           b.setAttribute( "checked", true);}
    else {b.checked=true}
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Ho, ce n'est même pas la peine : marche dans tous les cas.

    Le seul souci étant que IE l'affiche ou pas selon que l'appel a été fait avant ou après l'insertion dans l'arbre DOM alors que j'aurais aimé pouvoir m'affranchir de cette contrainte de séquencement, ainsi que Firefox et Opera m'y autorisent. Mais bon, tant pis, je vais faire avec

  9. #9
    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 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    ben selon toute logique après le append faut pas faire de modifs ...

    il serait plus logique de lui coller un id et de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById(ident).checked=true
    après l'append ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    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
    La solution vient du default
    l'attribut defaultChecked permet de réinitialiser le formulaire sur un reset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	var f = document.getElementById( "f" );
    	b = document.createElement( "input" );
    	b.setAttribute( "type", "checkbox" );
    	b.checked = true; // A --> si on le fait avant le appendChild, ça ne marche pas sur IE
    	b.defaultChecked = true; ; // A --> si on le fait avant le appendChild, ça marche pour IE
    	f.appendChild( b );
    	f.appendChild( document.createTextNode( "Blablabla" ) );
    A+JYT

  11. #11
    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 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    bien vu le default checked ...
    encore fallait il le connaitre celui là
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    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
    c'est l'avantage d edisposer d'un débugeur pas à pas sous IE et sous FF

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/02/2011, 22h54
  2. Réponses: 12
    Dernier message: 06/08/2007, 07h46
  3. ordre des appels MFC
    Par bubugue dans le forum MFC
    Réponses: 1
    Dernier message: 24/01/2007, 19h34
  4. desactiver des input d'1 form, selon les radios
    Par zimotep dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/08/2006, 17h09
  5. Réponses: 4
    Dernier message: 09/08/2006, 11h05

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