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 :

arreter la propagation d'evenement


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut arreter la propagation d'evenement
    bonjour, voici le code :

    index.html
    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
    <html>
        <head>
            <title>mon titre</title>        
            <script src='moveable.js'></script>
        </head>
        <body>
            <div style='height:200px; width:300px; background-color: blue;' id='myDiv'>
                <form>
                    1 <input type='text' /><br/>
                    2 <input type='text' /><br/>
                    3 <input type='text' /><br/>
                    <input type='submit' />
                </form>
            </div>
            <script>moveable(document.getElementById('myDiv'));</script>
        </body>
    </html>
    moveable.js
    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
    var GT_DRAG = false;
    var GT_objInDrag = null;
     
    function moveable(obj) {
        obj.style.position = 'absolute';
        obj.addEventListener('mousedown', GT_begin_drag, false);
        obj.addEventListener('mouseup', GT_end_drag, false);
    }
     
    function GT_begin_drag(e) {
        if(!GT_DRAG) {    
            e.stopPropagation();
            e.preventDefault();
            GT_DRAG = true;
            GT_objInDrag = e.target;
            GT_objInDrag.style.backgroundColor = 'red';
            document.addEventListener('mousemove', GT_lets_drag, false);
        }
    }
     
    function GT_lets_drag(e) {
        if(GT_DRAG) {
            GT_objInDrag.style.left = e.clientX-5;
            GT_objInDrag.style.top = e.clientY-5;
        }
    }
     
    function GT_end_drag() {
        if(GT_DRAG) {
            GT_DRAG = false;
            GT_objInDrag.style.backgroundColor = 'blue';
            GT_objInDrag = null;
        }
    }
    Mon probleme est au niveau de la propagation des evenements, lorsque l'on fait un cliquer-glisser sur la div, on doit pouvoir la déplacer. Cela marche nickel, sauf que lorsque l'on fait un click sur un des éléments à l'intérieur de cette div, on voit que le code de GT_begin_drag est exécuté. J'ai mis un stopPropagation mais celui-ci n'a aucun effet !!!

    au secours !

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    stoppropagation c'est pour Gecko ...

    pour du crossbrowser ici par exemple sur des balises li :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function stopLis(){
    var AllLis=document.getElementsByTagName('li');
    alert(AllLis.length)
    for(j=0;AllLis[j];j++){
          AllLis[j].onclick=function(evt){
    			  		evt=(evt)?evt:window.event;
    			  		if (evt.stopPropagation) {evt.stopPropagation();}
    					else{evt.cancelBubble = true;}
    					}
    		}
    }

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Ah oui j'ai oublié de préciser que mon prog ne fonctionne QUE sur FIREFOX. Je ne veux pas d'IE7 !!!

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    peu importe tu peux adapter ce code ... ou au pire ne pas le modifier ... qui peut le plus peut le moins

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Ben honnêtement cela ne marche pas non plus. C'est un programme qui doit normalement être destiné à plusieurs div dans une même page. Je pense qu'il ne doit pas être situé au bon endroit ...

    Je continue à chercher, si quelqu'un a une solution ...

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    ben replace li par div ... et lance la fonction dans le onload de la page ???

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Toujours pas, j'exécute la fonction après l'avoir adaptée mais la propag se fait toujours ! comprends pô, je pense que c'est lié à l'endroit où on le met ...

    EDIT: Après quelques essais, je pense qu'il y a un sens à respecter. Lorsque je met le stopPropagation sur mes INPUT, cela fonctionne. Le problème est qu'il va falloir mettre un stopPropagation sur tous les "enfants" de ma div ! Y'a-t-il un moyen d'éviter cela ?

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    dasn le onlaod de la page !!

    tu la mets dans une fonction danc le head de ta page et tu ma lances dans le onload

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    C'est ce que j'ai fait, je met la fonction dans le HEAD, puis je l'appelle par un onLoad ! Voir le EDIT dans mon message précédent...

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    montre ton code ?

  11. #11
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Trop tard je l'ai modifié !!!

    J'ai fait une fonction récursive qui ajoute un stopPropagation sur tous éléments enfants d'une DIV ! C'est carrément pô propre mais ça marche !

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    heu ben c'est exacteent ce qu'est supposé faire le code donné sur la collection des getElementsByTagName('div')

  13. #13
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Pas vraiment, si je remplace LI par DIV, il se contente juste de mettre stopPropagation sur la DIV mais pas sur les éléments enfants... De plus dans ma DIV, je peux avoir plusieurs sortes d'élements (texte, liste, image, etc.)

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    ha ben si tu ne donnes pas tous les détails ...

  15. #15
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Je pense comme je l'ai dit que stopPropagation n'agit que dans le sens de la remontée des évènements (bubbling) et pas dans la phase de capture...

    EDIT : j'ai taggé comme résolu alors que ça ne l'est pas, mais en l'absence de précisions d'autres utilisateurs et comme j'ai trouvé une solution "bricolée" ...

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

Discussions similaires

  1. Propagation d'evenement dans une classe
    Par C_le_N dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 21/07/2010, 11h28
  2. [C#] Propagation d'evenement entre differents controls
    Par Omsalam dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/04/2010, 11h00
  3. Propagation d'un evenement comme une fuite
    Par le merou dans le forum Delphi
    Réponses: 1
    Dernier message: 19/06/2007, 18h01
  4. Bloquer la propagation d'un evenement
    Par roudoudouduo dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 03/04/2007, 18h52
  5. Stopper la propagation d'un evenement
    Par systemofaxav dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/06/2006, 14h41

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