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 :

onmouseover imbriqués et IE6


Sujet :

JavaScript

  1. #21
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 92
    Par défaut
    le_chomeur, je viens de tester la solution que tu m'as envoyé. Elle fonctionne avec l'exemple simple. On avance! Maintenant, si tu aimes relever les défis (hé hé!!! ), je te joins le casse tête ultime :
    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
     
    <html>
      <head>
        <style type="text/css">
          .overDiv {background-color : red;}
          .outDiv {background-color: white;}
          .overSpan {background-color: orange;}
          .outSpan {background-color: white;}
          table, tr, td {border: 2px solid #111CCC;}
        </style>
     
        <script type="text/javascript">
     
          function out1(e) {
              // compatibilité
              if (!e) var e = window.event;
     
              // élément duquel on arrive 
              var tg = (window.event) ? e.srcElement : e.target;
              if (tg.id != 'conteneur') {
                  return;
              }
     
              // élément vers lequel on va
              var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
              while (reltg != tg && reltg.nodeName != 'BODY') {
                  reltg = reltg.parentNode
              }
     
              // ?
              if (reltg == tg) {
                  return;
              }
     
              // action
              document.getElementById("conteneur").className = "outDiv";
              document.getElementById("msg").innerHTML += " (conteneur out)";
          }
     
          function over1(e) {
            // action
            document.getElementById("conteneur").className = "overDiv";
            document.getElementById("msg").innerHTML += " (conteneur over)";
     
            // on stop la propagation de tous les éléments enfants
            if(e.cancelBubble) {
                  e.cancelBubble = true;
            }
            else {
                  e.stopPropagation();
            }
     
            return;
          }
     
          function out2(id) {
            // action
            document.getElementById(id).className = "outSpan";
            document.getElementById("msg").innerHTML += " (span out)";
            return;
          }
     
          function over2(id) {
            // action
            document.getElementById(id).className = "overSpan";
            document.getElementById("msg").innerHTML += " (span over)";
            return;
          }
        </script>
      </head>
     
      <body>
       <div style="padding:100px;width:400px;height:400px;background-color:green;">
        <div id="conteneur" class="outDiv" style="width: 200px;border:2px solid #666DDD">
          <table>
              <tr>
                <td>
                <span id="span1" name="highlight" class="outSpan" style="color: #0000FF; font-weight: bold">
                    contenu du span 1
                </span>
              </td>
              <td>
                <span id="span2" name="highlight" class="outSpan" style="color: #0000FF; font-weight: bold">
                    contenu du span 2
                </span>
              </td>
            </tr>
            <tr>
                <td colspan=2>
                <div id="div1" name="highlight" class="outSpan" style="color: #0000FF; font-weight: bold">
                    contenu du div 1
                </div>
              </td>
            </tr>
            <tr>
              <td colspan=2>
                <span id="span3" name="highlight" class="outSpan" style="color: #0000FF; font-weight: bold">
                    contenu du span 3
                </span>
              </td>
            </tr>
          </table>
        </div>
     
        <p id="msg"></p>
      <div>
        <script type="text/javascript">
     
          // ajout event listener sur conteneur
          var conteneur = document.getElementById("conteneur");
          conteneur.onmouseover = function(e) {
              over1(e);
          }
          conteneur.onmouseout = function(e) {
              out1(e);
          }
     
          // ajout event listener sur les spans
          var spans = document.getElementsByName("highlight");
          for (var i=0; i<spans.length; i++) {
            var span = spans[i];
            span.onmouseover = function() {
                over2(this.id);
            }
            span.onmouseout = function() {
                out2(this.id);
            }
          }
        </script>
     
      </body>
    </html>
    Dans cet exemple un poil plus complexe, il arrive qu'un mouseout attendu au niveau du conteneur ne se produise pas.

  2. #22
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Je le sens mal lol... je regarde ce soir ou dès que j'ai un peu plus de temps car la ça m'a l'air déja plus complexe que la solution que je t'ai envoyé ^^

  3. #23
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 661
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 661
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    Je le sens mal lol... je regarde ce soir ou dès que j'ai un peu plus de temps car la ça m'a l'air déja plus complexe que la solution que je t'ai envoyé ^^
    dommage que l'on ait pas profité de la solution envoyée

    le_chomeur : tu pourrais poster le code en question ? (je suis curieux de le voir, et j'aimerais bien l'étudier )

  4. #24
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 92
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    Je le sens mal lol...
    yep c'est pas gagné c't'affaire.

    Citation Envoyé par le_chomeur Voir le message
    je regarde ce soir ou dès que j'ai un peu plus de temps car la ça m'a l'air déja plus complexe que la solution que je t'ai envoyé ^^
    Je vais en profiter pour bosser un peu.... mdr

  5. #25
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Le_chomeur : tu pourrais poster le code en question ? (je suis curieux de le voir, et j'aimerais bien l'étudier  )
    Aie j'ai supprimé tous mes MP car je n'avais plus de place juste après l'envois du message , picwic peux tu mettres ce que je t'ai envoyé ?

    Sinon niveau algo :

    je récupère uniquement le mouseover sur le div et annile les autres over / out de ce qu'il contient et récupère le mouseout a la sortie normale

  6. #26
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 92
    Par défaut
    Pour Auteur, je poste le message de le_chomeur :

    Citation Envoyé par le_chomeur
    Voila , j'ai repris une partie du code que tu avais fais , ( je n'ai pas utiliser ma méthode, car en relisant ton post j'ai vu que tu avais d'autre élément a l'intérieur de tes divs et avec ma méthode il aurais fallut utiliser une fonction récursive pour bloquer tous les évènements des enfant

    Donc je bloque l'évènement du parent simplement ^^

    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
     
    <html>
      <head>
        <style type="text/css">
          .div1{
            width: 200px; 
            height: 200px;
            border: 1px solid #AAAAAA;
          }
          .overDiv {background-color : red;}
          .outDiv {background-color: white;}
          .overSpan {background-color: orange;}
          .outSpan {background-color: white;}
        </style>
     
     
        <script type="text/javascript">
     
          function out1(e) {
              // compatibilité
              if (!e) var e = window.event;
     
              // élément duquel on arrive 
              var tg = (window.event) ? e.srcElement : e.target;
              if (tg.id != 'div') {
                  return;
              }
     
              // élément vers lequel on va
              var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
              while (reltg != tg && reltg.nodeName != 'BODY') {
                  reltg = reltg.parentNode
              }
     
              // ?
              if (reltg == tg) {
                  return;
              }
     
              // action
              this.className = "outDiv";
              document.getElementById("msg").innerHTML += " (div out)";
          }
     
          function over1(e) {
              // action
             this.className = "overDiv";
            document.getElementById("msg").innerHTML += " (div over)";
     
            //On stop la propagation de tous les éléments enfant
            if(e.cancelBubble)
            {
                  e.cancelBubble = true;
            }
            else {
                  e.stopPropagation();
            }
     
            return;
          }
        </script>
      </head>
     
      <body>
       <div style="width:400px;height:400px;background-color:green;">
        <div id="div" class="outDiv" style="width: 200px;height:200px;border:1px solid #AAAAAA;">
          bla bla bla bla bla bla bla bla bla bla bla bla
          <span id="span" class="outSpan" style="color: #0000FF; font-weight: bold">
              contenu du span contenu du span contenu du span contenu du span
          </span>
          <div style="width:40px;height:40px;background-color:yellow;">
          </div>
          bla bla bla bla bla bla bla bla bla bla bla bla
          bla bla bla bla bla bla bla bla bla bla bla bla
        </div>
     
        <p id="msg"></p>
      <div>
        <script type="text/javascript">
          var div=document.getElementById("div");
          div.addEventListener("mouseover", over1, false);
          div.addEventListener("mouseout", out1, false);
        </script>
     
      </body>
    </html>
    je pense que c'est le résultat escompté :

    survol de la div verte : rien
    survol de la div souhaité : rouge
    survol des éléments a l'intérieur ( n'importe lesquels , la div reste rouge !
    survol en dehors de la div : elle redevient normal

    En espérant avoir bien situé ton problème

  7. #27
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 661
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 661
    Par défaut
    Citation Envoyé par picwic Voir le message
    Pour Auteur, je poste le message de le_chomeur :
    merci je vais étudier ça

  8. #28
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 92
    Par défaut
    Citation Envoyé par Auteur Voir le message
    merci je vais étudier ça
    Alors cette étude, ça avance?!

  9. #29
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 661
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 661
    Par défaut
    Citation Envoyé par picwic Voir le message
    Alors cette étude, ça avance?!
    Non, je n'ai pas eu le temps de m'en occuper.

    Il faut que je reprenne le sujet au début, je l'ai complètement oublié.

  10. #30
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 92
    Par défaut At last !!!!
    En relisant l'article fort instructif sur les évènements du site quirksmode.org, je viens finalement de trouver La solution qui me convient parfaitement :

    - détection du browser
    - si IE => on utilise les events mouseenter / mouseleave
    - sinon => on utilise les events mouseover / mouseout

    Tout bête quoi..

    Un grand merci aux participants !!
    +

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. onmouseover onmouseout sur des éléments imbriqués
    Par Auteur dans le forum Général JavaScript
    Réponses: 49
    Dernier message: 09/08/2008, 23h55
  2. [JS + CSS] Onmouseover sur div marche pas sur ie6
    Par NeedYourHelp dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 23/04/2008, 18h49
  3. Encore des onmouseover onmouseout imbriqués
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 20/03/2008, 11h53
  4. Onmouseover sur elements imbriqués
    Par HwRZxLc4 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 12/04/2007, 16h40
  5. "boutons" imbriqués !!
    Par biloubil dans le forum Flash
    Réponses: 9
    Dernier message: 04/12/2003, 15h03

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