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 :

Masquer un select sous ie6 avec une source de la FAQ


Sujet :

JavaScript

  1. #1
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut Masquer un select sous ie6 avec une source de la FAQ
    Bonjour,

    Je bloque sur l'utilisation d'une source de la FAQ http://javascript.developpez.com/faq...put.div.select qui permet de faire passer un div au dessus d'un select dans IE6.

    J'ai constitué un menu horizontal qui doit passer au dessus d'un select, mais je ne sais pas ou placer l'événement onMouseOver="putFrame()", pour le moment j'ai placé l'événement dans la div du menu mais ça ne fonctionne pas.

    Pour les courageux qui feront le copier/coller du code ci-dessous qui affiche la page complète avec le css et le javascript, pouvez-vous me dire ou est mon erreur ?
    Merci d'avance pour vos réponse .


    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    <script type="text/javascript">
    // Pour afficher correctement le menu déroulant dans IE6
    sfHover = function() {
    var sfEls = document.getElementById("menu").getElementsByTagName("li");
       for (var i=0; i<sfEls.length; i++) {
           sfEls[i].onmouseover=function() {
              this.className+=" sfhover";
               }
            sfEls[i].onmouseout=function() {
        this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
                    }
            }
    }
    if (window.attachEvent) window.attachEvent("onload", sfHover);
     
     
    // Masquer le select
    function putFrame(){
    var f    = document.createElement("iframe");
    var d    = document.getElementById("menu");
     
    with(f.style){
    position= "absolute";
     width    = d.offsetWidth+"px";
      height= d.offsetHeight+"px";;
     top= d.offsetTop+"px";
      left= d.offsetLeft+"px";
       zIndex= "1";
    }
     
    document.body.appendChild(f);
    }
     
    </script>
     
    <style>
    #Nav {
    list-style: none;
    }
     
    #Nav li {
    background: #7F8400; /* Couleur fond */
    float: left;
    }
     
    #Nav li a {
    display: block;
    background: #7F8400; /* Couleur fond */
    color: white;
    text-decoration: none;
    }
     
    #Nav li a:hover {
    display: block;
    background: #7F8400 url('images/menuactive.gif') repeat-x; /*Couleur passage souris */
    color: white;
    }
     
    .Menu li {
    list-style: none;
    display: block;
    width:120px;
    }
     
    .sous_menu {
    list-style: none;
    display: block;
    width:140px;
    margin-left: 120px;
    margin-top: -30px;
    }
     
    #menu
    {
    position: relative;
    background: #7F8400 url('images/menubg.gif') repeat-x top left;
    height: 2.5em; /* Hauteur du fond vert */
    padding: 0em 1.0em 0em 1.0em;
    margin-bottom: 2px;
    z-index:2;
    }
     
    #menu li a
    {
    padding: 0.6em 1.0em 0.5em 1.0em; /* Dimension de l'image du menu (menuactive.gif) au passage de la souris*/
    }
     
    #menu li ul /* Sous-listes */
    { 
            position: absolute; /* Position absolue */
            width: 144px; /* Largeur des sous-listes */
            left: -999em; /* Hop, on envoie loin du champ de vision */
    }
     
    #menu a:hover /* Lorsque la souris passe sur un des liens */    
    {
            color: #000; /* On passe le texte en noir... */
            background: #fff; /* ... et au contraire, le fond en blanc */
    }
     
    #menu li:hover ul ul, #menu li.sfhover ul ul /* Sous-sous-listes lorsque la souris passe sur un élément de liste */
    {
            left: -999em; /* On expédie les sous-sous-listes hors du champ de vision */
    }
     
    #menu li:hover ul, #menu li li:hover ul, #menu li.sfhover ul, #menu li li.sfhover ul  /* Sous-listes lorsque la souris passe sur un élément de liste ET sous-sous-lites lorsque la souris passe sur un élément de sous-liste */
    {
            left: auto; /* Repositionnement normal */
            min-height: 0; /* Corrige un bug sous IE */
    }
     
    #liste { position: absolute; left: 15em; top: 7em; }
    </style>
     
    </head>
    <body>
    <div id="menu" onMouseOver="putFrame()">
      <ul id="Nav">
    	<li><a href="#">Menu</a>
    	  <ul class="Menu">
    		<li><a href="#">Menu1</a></li>
    		<li><a href="#">Menu2</a></li>
    	  <ul class="sous_menu">
    	        <li><a href="#">Menu3</a></li>
    	  </ul>
    	</ul>
          </li>
    </ul>
    </div>
     
    <div id="liste">
    	<select>
    	<option>Option1</option>
    	</select>
    </div>
    </body>
    </html>

  2. #2
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    A défaut d'avoir résolu mon problème, j'ai opté provisoirement pour une solution impropre : je rend visible ou invisible le select en fonction du passage sur le menu. (Mon intranet va me tomber dessus lundi ! )

  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 141
    Points
    11 141
    Par défaut
    bonjour,

    j'ai examiné le code source de l'exemple :
    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
     
    <script type='text/javascript'>
                function putFrame(){
                  var f = document.getElementById("theFrame");
                  if (f) {
                      f.parentNode.removeChild(f);
                  } else {
                      f    = document.createElement("iframe");
                      f.id = "theFrame";
                      var d    = document.getElementById("theDiv");
     
                      with(f.style){
                          position    = "absolute";
                          width        = d.offsetWidth+"px";
                          height        = d.offsetHeight+"px";;
                          top            = d.offsetTop+"px";
                          left        = d.offsetLeft+"px";
                          zIndex        = "1";
                      }
     
                      document.body.appendChild(f);
                  }
                }
     
    </script>
    Code css : 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
    <style type='text/css'>
                #theDiv{
                    position: absolute;
                    top: 500px;
                    left: 300px;
                    width: 200px;
                    height: 70px;
                    background-color: #F0E0FE;
                    z-index: 2;
                }
                #div1{
                    position: absolute;
                    top: 500px;
                    left: 300px;
                }
    </style>

    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
     
    <div id='div1'>
            <select id='list'>
                    <option value='1'>1</option>
     
                    <option value='2'>2</option>
                    <option value='3'>3</option>
            </select>
            <br />
            <br />
            <br />
            <br />
            <input type='button' value='Ajouter/Supprimer la frame'  onclick='putFrame()'/>
     
    </div>
    <div id='theDiv'>Ceci est la div qui devrait passer au dessus du select
    </div>

    Tu dois d'abord créer un div vide (avec un fond transparent ) que tu positionnes en absolu : dans l'exemple le div en question est "thediv". Ce div vient se placer au-dessus du div qui contient la liste déroulante.

    Ce div "thediv" ne sert en réalité qu'à positionner et dimensionner l'iframe qui viendra cacher la liste déroulante.

Discussions similaires

  1. Modifier la source d'un sous-formulaire avec une variable
    Par jslagier dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/10/2007, 10h50
  2. Réponses: 0
    Dernier message: 10/08/2007, 21h42
  3. Somme d'un sous formulaire avec une table comme source
    Par yoyosoleil dans le forum Access
    Réponses: 4
    Dernier message: 22/06/2006, 11h00
  4. "Erreur SQL générale" sous NT2000 avec une base ac
    Par aleister dans le forum Bases de données
    Réponses: 5
    Dernier message: 14/04/2005, 20h10
  5. [ORACLE][SQL] procedure sous delphi avec une requete SQL
    Par nivet dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/11/2004, 13h43

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