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 :

stopper la propagation de l'évènement onclick


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Points : 250
    Points
    250
    Par défaut stopper la propagation de l'évènement onclick
    Bonjour,
    voici un extrait de ma page jsp

    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
     
    <body onclick="f1();">
           <img id="image"  name="image" onclick="f2()" src="..."/>
           <div id="pagenav_menu" " onclick="f3()">
                   <table>
                       <tbody>
                            <tr>
                                    <td>Aller à la page...</td>
                            </tr>
                             <tr>
                                    <td>
                                            <form id="pagenav_form" action="..." method="get" onsubmit="return gotopage()" name="pagenav_form">
                                                     <input id="pagenav_itxt"  type="text"  name="pagenav_itxt"/>
                                                     <input id="pagenav_ibtn" class="button" type="button" value="Go"/>
                                             </form>
                                   </td>
                             </tr>
                        </tbody>
                    </table>
            </div>
    </body>
    Quand je clique sur l'un des 4 éléments suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <img id="image"  name="image" onclick="f2()" src="..."/>
    <div id="pagenav_menu" " name="pagenav_menu" onclick="f3()">
    <input id="pagenav_itxt"  type="text"  name="pagenav_itxt"/>
    <input id="pagenav_ibtn" class="button" type="button" value="Go"/>
    l'évènement onclick est propagé vers l'élément body et la fonction f1() est appelée. Or je voudrais stopper la propagation de l'évènement onclick au niveau des 2 éléments suivants : <img> et <div>

    J'ai d'abord essayé quelque chose du type
    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
     
    document.getElementById('pagenav_menu').onclick=function() {
    	var e = arguments[0];
    	if (!e)      
    		e = window.event;    
    	if (e.cancelBubble)      
    		e.cancelBubble = true;    
    	else      
    		e.stopPropagation();
    }
     
    ou
     
    document.pagenav_menu.onclick=function() {
    	var e = arguments[0];
    	if (!e)      
    		e = window.event;    
    	if (e.cancelBubble)      
    		e.cancelBubble = true;    
    	else      
    		e.stopPropagation();
    }
    mais le programme ne passe même pas dans cette fonction. Ca ne marche pas. Y a t-il une erreur ? (c'est ma première question)

    J'ai alors essayé la chose suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function f3(){
    	var e = arguments[0];
    	if (!e)      
    		e = window.event;    
    	if (e.cancelBubble)      
    		e.cancelBubble = true;    
    	else      
    		e.stopPropagation();
    }
    Là le programme passe dans la fonction f3() mais il ne reconnait pas la variable e (évènement) qui est "undefined" et il ne se passe rien et l'évènement est quand même propagé. Le problème est que je suis obligé de gérer différemment la propagation suivant que je suis sous IE ou un autre browser.
    Est-ce que quelqu'un peut me venir en aide ? Merci

  2. #2
    Membre régulier Avatar de Lideln75
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 111
    Points : 102
    Points
    102
    Par défaut
    Petite réponse avant de partir :

    Déjà je ne saurais que trop recommander l'utilisation d'un Framework (genre jQuery !), qui te permettra de t'abstraire des compatibilités entre navigateurs (c'est lui qui gère tout seul comme un grand, du coup tu peux te consacrer à d'autres tâches plus "métier" dans ton projet).

    Il faut passer ton élément event ("e", dans ton code), à l'appel de la fonction.

    Genre, en code "fait main" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <div id="blabla" onclick="myFunction(event);">click me !</div>
     
    <script type="text/javascript">
    function myFunction(event)
    {
        // code pour gérer le event sur les différents navigateurs
        ...
     
        // le vrai code de la fonction
        doThings();
    }
    </script>
    En jQuery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <div id="blabla">click me !</div>
     
    <script type="text/javascript">
     
    $('#blabla').click(function(e)
    {
        e.stopPropagation();
     
        // Le code de la fonction
        doThings();
    });
    Voici un lien expliquant tout en détails :
    http://www.jquery.info/spip.php?article47

    Bonne journée !

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Points : 250
    Points
    250
    Par défaut
    Merci Lideln75 pour ta réponse, maintenant ca marche. Et merci pour le tuyau Jquery.

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

Discussions similaires

  1. [Dojo] Stopper la propagation d'un évènement sous IE
    Par bellenthan dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 24/07/2009, 16h34
  2. Propagation d'un événement
    Par tarzent dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/03/2006, 19h04
  3. Changement dynamique de l'évènement OnClick
    Par cluis dans le forum Access
    Réponses: 3
    Dernier message: 22/03/2006, 11h30
  4. Erreur avec l'évènement OnClick de ListView
    Par xenos dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/03/2006, 14h54
  5. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52

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