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 :

Display, Visibility.. fâchés avec IE ?


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 31
    Points : 20
    Points
    20
    Par défaut Display, Visibility.. fâchés avec IE ?
    Bonjour,

    Je suis un débutant en javascript et, naïf que je suis, je me heurte à de nombreux soucis de compatibilité entre FF et IE.
    Le problème qui me pourrit la vie actuellement concerne le masquage d'éléments. Parrait-il que c'est déprecié de de déclarer des elem en mais ma malheureuse page n'a pas vocation à être visitée et encore moins référencée.

    J'ai donc ce code :
    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
     
    <input type="checkbox" onChange="showElem('p-auteur')"> Bla Bla </input>
    ....
    -----------------------------------------------
    function contenu(){
            document.write("<p id='p_auteur'>du bordel dynamique calculé avec JS</p>");
    }
     
    function showElem(id){
    	var elem = document.getElementById(id);
    	if(elem.style.display == "none"){
    		elem.style.display = "block";
    	}else{
    		elem.style.display = "none";
    	}
    }
    Sous FF, niquel...

    Sous IE c'est hyper chiasseux comme affichage. C'est executé, mais c'est comme si il manquait un "repaint()" (pour causer Java). Quand je clique dans la zone parente l'elem paresseux s'affiche ou se cache (en differé donc).
    Cependant quand les elems à cacher sont déclarer directement dans le HTML ça se passe bien, même pour IE j'entend...
    Enfin presque, il balance le tout après un div déclaré pourtant comme dernier élément...

    Enfin quand je dis IE, je n'ai testé que sur un browser basé sur IE : "Avant Browser". Mais je doute que ça change qqc sous IE pur et dur ?

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 649
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 649
    Points : 11 138
    Points
    11 138
    Par défaut
    bonjour,

    les attributs visibility et display sont différents !! Et l'utilisation de display n'est pas dépréciée, loin de là !

    Code html : 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
    34
     
    <html>
    <head>
    <title></title>
     
    <script type="text/javascript">
    <!--
    function showElem(id)
    {
            var elem = document.getElementById(id);
            if(elem.style.display == "none")
        {
                    elem.style.display = "block";
            }
        else
        {
                    elem.style.display = "none";
            }
    }
     
    //-->
    </script>
     
    </head>
     
    <body>
    <input type="checkbox" onclick="showElem('p_auteur')" />Bla Bla
     
    <p id='p_auteur' style="display: none">du bordel dynamique calculé avec JS</p>
     
     
    </body>
     
    </html>
    L'input n'a pas de balise de fermeture.
    Ne confonds pas _ et - (p-auteur et p_auteur)

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Quand je dis que je débute, je ne voulais pas dire à ce point .

    J'ai bien compris que visibility et display sont différents, mais le fait est que l'affichage sous IE souffre du même soucis dans les deux cas. A savoir donc qu'il faut cliquer dans la zone censée s'être modifiée pour voir les modifications s'oppérer (masquer/afficher).

    Mon code est propre, c'est juste une erreur de recopiage pour le "-" et "_". Je rappelle que sous FF il tourne parfaitement.

    Les balises inputs étaient fermées par un </input>, et non un <input ../>. Je suis passé en mode condensé pour la peine histoire de.


    Apparement le soucis c'est que créer des éléments par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.write("<p style='display:none'>plouf plouf</p>");
    IE n'aime pas quand je veux modifier le display apparement. FF lui ça le gène pas.

    Personne n'a jamais eut ce pb ? Mes élements doivent ils forcément être présents par défaut dans le HTML (même vide) pour que IE fonctionne correctement ?

    OU plus simple y a t-il une fonction, une feinte, adapté à IE pour "rafraichir" une zone ? Car, je le rappelle, quand je clique dans le div contenant les élements dynamique après coup, les modifications d'affichage s'opèrent sous IE.

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 649
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 649
    Points : 11 138
    Points
    11 138
    Par défaut
    Sous IE l'événement onchange ne fonctionne pas sur les checkbox. Essaye ceci :

    Code html : 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
    34
    35
    36
    37
    38
    39
    40
     
    <html>
    <head>
    <title></title>
     
    <script type="text/javascript">
    <!--
    function showElem(id)
    {
            var elem = document.getElementById(id);
            if(elem.style.display == "none")
        {
                    elem.style.display = "block";
            }
        else
        {
                    elem.style.display = "none";
            }
    }
     
    //-->
    </script>
     
    </head>
     
    <body>
    <input type="checkbox" onclick="showElem('p_auteur')"> Bla Bla
     
     
    <script type="text/javascript">
    <!--
    document.write("<p style='display: none' id='p_auteur'>plouf plouf</p>");
     
    //-->
    </script>
     
     
    </body>
     
    </html>

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Alors là un grand merci, je me suis trituré la tête dans tout les sens alors que c'était aussi bête que ça. Sauf qu'il fallait le savoir -_-.

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

Discussions similaires

  1. Images visibles même avec client qui les bloque
    Par php_de_travers dans le forum E-Mailing
    Réponses: 0
    Dernier message: 30/12/2009, 22h27
  2. Probleme display:inline-table; avec images
    Par cuisto44000 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 01/07/2008, 02h15
  3. os.popen est-il fâché avec les caractères Unicode ?
    Par goran kajfes dans le forum PyQt
    Réponses: 1
    Dernier message: 02/05/2008, 13h53
  4. Affichage d'un formulaire avec display, visibility ou autre
    Par cluis dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/07/2007, 14h03
  5. overflow en visible mais avec scrollbar
    Par nixonne dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 26/04/2006, 10h58

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