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] Pb gestion de l'évènement mouseout sur une <DIV>


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut [DOM] Pb gestion de l'évènement mouseout sur une <DIV>
    Bonjour,

    j'ai un petit souci de compéhension au sujet de la gestion de l'évènement mouseout. J'ai une Div qui contient un Tableau, je voudrais appeler une fonction javascripts quand la souris quitte cette Div.

    Mon code ressemble à:

    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
     <div id="Div1" onmouseout="maFonctionJavascript();">
            <table border="1" cellspacing="0" cellpadding="0"  >
            <tr>
                <td >&nbsp;</td>
                <td>&nbsp;</td>
                <td >&nbsp;</td>
            </tr>
            <tr >
                <td >&nbsp;</td>
                <td>&nbsp;</td>
                <td >&nbsp;</td>
                </td>
            </tr>
        </table>
    </div>
    Je remarque que l'évènement est déclenché à plusieurs reprises et pas seulement quand je quitte la Div !!! par exemple quand je change de cellule dans le tableau et à l'intérieur de la Div !!!!! Que faut il que je fasse pour arriver à mon résultat.

    D'avance, merci pour votre aide.

  2. #2
    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 139
    Points
    11 139
    Par défaut
    bonjour,

    Le truc est qu'il faut gérer aussi l'événement over sur le div : s'il a lieu on empèche l'exécution de fonction mouseOut(). Cette fonction est appelé 200ms (tu peux faire varier la durée, mais 200ms c'est suffisant) après l'appel de la fonction fout(). Si dans ce laps de temps, l'événement over a lieu, on fait un clearTimeout et la fonction mouseOut() n'est pas appelée.

    Le code affiche également l'ordre d'appel des fonctions, pour tu puisses voir comment l'ensemble fonctionnne (<div id="test">).

    J'affiche également une bordure au div : je te conseille de donner les mêmes dimensions à ton div et ton tableau pour éviter tout souci avec les événements.
    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>
     
    <script type="text/javascript">
    <!--
    var timer = null;
    function mouseOut()
    {
     alert("je suis sorti !!");
    }
    function fout()
    {
      timer = setTimeout(function(){mouseOut()},"200");
      document.getElementById("test").innerHTML += " out ";
    }
     
     
    function fover()
    {
      clearTimeout(timer);
      document.getElementById("test").innerHTML += " over ";  
    }
     
    //-->
    </script>
     
    </head>
     
    <body>
     
    <div style="border: 1px solid #AAAAAA" id="Div1" onmouseout="fout()" onmouseover="fover()">
     
      <table border="1" cellspacing="0" cellpadding="0" >
      <tr>
      <td>&nbsp;bla bla bla</td>
      <td>&nbsp;bla bla bla</td>
      <td >&nbsp;bla bla bla</td>
      </tr>
      <tr >
      <td >&nbsp;bla bla bla</td>
      <td>&nbsp;bla bla bla</td>
      <td >&nbsp;bla bla bla</td>
      </td>
      </tr>
      </table>
     
    </div>
     
        <div id="test"></div>
     
    </body>
     
    </html>

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Résolu mais...
    merci beaucoup, c'est tout à fait je que je voulais
    Cependant je suis assez surpris par le comportement de l'évènement "mouseout" !!!!! je découvre qu'il s'applique aussi aux éléments enfants du DOM

    Hervé.

  4. #4
    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 139
    Points
    11 139
    Par défaut
    Citation Envoyé par rvux69
    merci beaucoup, c'est tout à fait je que je voulais
    Cependant je suis assez surpris par le comportement de l'évènement "mouseout" !!!!! je découvre qu'il s'applique aussi aux éléments enfants du DOM

    Hervé.

    non il s'applique au div ! Quand tu survoles l'enfant (une bordure du tableau) tu sors du div (out) et tu entres dans l'enfant mais comme l'enfant est dans le div, tu entres à nouveau dans le div (over).
    Le plus difficile à mettre en évidence est le nombre de fois que l'événement est appelé : cela dépend du navigateur.
    Et surtout savoir par quel événement cela va se terminer : un out ou un over ? Sur ce dernier point je crois que les navigateurs sont d'accord.

  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 139
    Points
    11 139
    Par défaut
    Citation Envoyé par rvux69
    merci beaucoup, c'est tout à fait je que je voulais
    Cependant je suis assez surpris par le comportement de l'évènement "mouseout" !!!!! je découvre qu'il s'applique aussi aux éléments enfants du DOM

    Hervé.
    non il s'applique au div ! Quand tu survoles l'enfant (une bordure du tableau) tu sors du div (out) et tu entres dans l'enfant mais comme l'enfant est dans le div, tu entres à nouveau dans le div (over).
    Pour illuster ce propos :
    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
     
    <html>
    <head>
    <title></title>
     
    <script type="text/javascript">
    <!--
    function out1() {document.getElementById("idDiv").innerHTML += " (div 1 out)";}
     
    function out2() {document.getElementById("idDiv").innerHTML += " (div 2 out)";}
     
    function out3() {document.getElementById("idDiv").innerHTML += " (div 3 out)";}
     
    function over1() {document.getElementById("idDiv").innerHTML += " (div 1 over)";}
     
    function over2() {document.getElementById("idDiv").innerHTML += " (div 2 over)";}
     
    function over3() {document.getElementById("idDiv").innerHTML += " (div 3 over)";}
     
    //-->
    </script>
     
    </head>
     
    <body>
    <div style="width: 200px; height: 200px; border: 1px #AAAAAA solid;" onmouseover="over1()" onmouseout="out1()">
    div 1
    <div style="width: 100px; height: 100px; border: 1px #AAAAAA solid; margin:30px;" onmouseover="over2()" onmouseout="out2()">
    div 2
    <div style="width: 50px; height: 50px; border: 1px #AAAAAA solid; margin:15px;" onmouseover="over3()" onmouseout="out3()">
    div 3
    </div></div></div>
     
    <div id="idDiv"></div>
     
    </body>
     
    </html>

    Passe la souris sur les différents div et regarde l'affichage.

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

Discussions similaires

  1. [DOM] Afficher du texte après un clic sur une photo
    Par tony7000 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/01/2009, 20h17
  2. [DOM] Gérer l'événement onMouseOver sur une image créée avec DOM
    Par sab_etudianteBTS dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 20/02/2008, 12h06
  3. événement onclick sur une case de tableau
    Par Mathieu72 dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 25/03/2007, 17h24
  4. Réponses: 1
    Dernier message: 08/11/2006, 17h23
  5. gestion d'erreur resume next sur une portion de code
    Par aarlock dans le forum Access
    Réponses: 2
    Dernier message: 02/06/2006, 15h28

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