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 :

javascript et la propriete display


Sujet :

JavaScript

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut javascript et la propriete display
    bonsoir,

    voici 2 exemples indépendants. Ce problème apparaît sous IE et FF (et sans doute sur les autres navigateurs).

    1er exemple : le style display est défini dans la partie <style></style>
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <html>
    <head>
    <title></title>
    <style type="text/css">
    <!--
    li{
    cursor: pointer;
    }
     
    .SousMenu{
    display: none;
    }
    //-->
    </style>
     
    <script type="text/javascript">
    <!--
    function GestionMenu(objet){
     var objetFils = "Sous"+objet.id;
     var elmt =  document.getElementById(objetFils);
     
     alert("style.display= "+elmt.style.display);
     
     if (elmt.style.display=="none")
        elmt.style.display = "block";
     else
        elmt.style.display = "none";
     
    }
     
    //-->
    </script>
     
    </head>
     
    <body>
    <ul>
    <li id="Menu1"onclick="GestionMenu(this)">Menu 1</li>
        <ul id="SousMenu1" class="SousMenu">
        <li>Sous menu11</li>
        <li>Sous menu12</li>
        <li>Sous menu13</li>
        </ul>
    <li id="Menu2" onclick="GestionMenu(this)">Menu 2</li>
        <ul id="SousMenu2" class="SousMenu">
        <li>Sous menu21</li>
        <li>Sous menu22</li>
        <li>Sous menu23</li>
        </ul>
    </ul>
     
    </body>
     
    </html>
    2ème exemple
    le style display est défini dans les balises ul concernées :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <html>
    <head>
    <title></title>
    <style type="text/css">
    <!--
    li{
    cursor: pointer;
    }
     
    //-->
    </style>
     
    <script type="text/javascript">
    <!--
    function GestionMenu(objet){
     var objetFils = "Sous"+objet.id;
     var elmt =  document.getElementById(objetFils);
     
     alert("style.display= "+elmt.style.display);
     
     if (elmt.style.display=="none")
        elmt.style.display = "block";
     else
        elmt.style.display = "none";
     
    }
     
    //-->
    </script>
     
    </head>
     
    <body>
    <ul>
    <li id="Menu1"onclick="GestionMenu(this)">Menu 1</li>
        <ul id="SousMenu1" style="display: none">
        <li>Sous menu11</li>
        <li>Sous menu12</li>
        <li>Sous menu13</li>
        </ul>
    <li id="Menu2" onclick="GestionMenu(this)">Menu 2</li>
        <ul id="SousMenu2"  style="display: none">
        <li>Sous menu21</li>
        <li>Sous menu22</li>
        <li>Sous menu23</li>
        </ul>
    </ul>
     
    </body>
     
    </html>
    Lors du 1er clic sur Menu1 ou Menu2 peut-on me dire pourquoi dans l'exemple 1 style.display="" (alors qu'il défini comme none). Il eut été logique que style.display="none" s'affichât, mais ce n'est pas le cas. Par conséquent, dans l'exemple 1, je dois attendre le second clic sur Menu1 ou Menu2 pour le test du display soit pris en compte.
    Quelqu'un a une idée??

    PS: il est vrai que je peux modifier la condition pour le script de l'exemple 1 fonctionne normalement, mais ce n'est pas ce qui m'intéresse.

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    tout simplement car tu as mis SousMenu au lieu de SousMenu1 dans ton style

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    j'ai défini une classe SousMenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <style type="text/css">
    <!--
    li{
    cursor: pointer;
    }
     
    .SousMenu{
    display: none;
    }
    //-->
    </style>
    et mon code html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <li id="Menu1"onclick="GestionMenu(this)">Menu 1</li>
        <ul id="SousMenu1" class="SousMenu">
        <li>Sous menu11</li>
        <li>Sous menu12</li>
        <li>Sous menu13</li>
        </ul>
    il n'y donc rien d'illogique. L'id est utilisé dans le script

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    oups j avais pas fais gaffe a ta classe, effectivement c est etrange ce comportement, faut passer par le style réel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var elmt =  document.getElementById(objetFils);
    if(elmt.currentStyle)
    	alert("style.display= "+elmt.currentStyle.display);
     else
    	 alert("style.display= "+window.getComputedStyle(elmt, '').getPropertyValue("display"));

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    merci siddh.


    Après quelques recherches
    serait pour IE et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.getComputedStyle(elmt, '').getPropertyValue("display")
    pour les autres navigateurs.
    Pour une fois IE fait simple

    J'ai également recueilli ce commentaire
    Les propriétés element.style.* sont destinées à contenir uniquement les valeurs pour les styles en-ligne (balise style="…")
    Pour simplifier le code JS, il serait tentant de définir des styles (ceux que l'on souhaite modifier) avec la balise style puis définir les autres styles dans le CSS. Mais le code HTML ne serait sans doute pas très élégant

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    pour ceux que cela intéresse voici un tableau des compatibilités :
    http://www.quirksmode.org/dom/w3c_css.html

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

Discussions similaires

  1. problème avec display:table et javascript
    Par florentB dans le forum Struts 1
    Réponses: 5
    Dernier message: 30/08/2007, 11h21
  2. display [javascript] [débutant]
    Par sebus dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/11/2006, 14h32
  3. Modifier en javascript une propriete css?
    Par wormseric dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 31/10/2006, 17h36
  4. Modifier le style d'un display en javascript
    Par Benjiijneb dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/02/2006, 10h24
  5. [FORMS 9i] Proprieté Number of records displayed
    Par cosmos38240 dans le forum Forms
    Réponses: 5
    Dernier message: 21/12/2004, 14h28

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