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

jQuery Discussion :

Propagation des évènements


Sujet :

jQuery

  1. #1
    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 Propagation des évènements
    bonjour a tous , j'ai un soucis que je n'arrive pas a résoudre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="1"><div id="2"><input type="checkbox" /></div></div>
    voila pour le code

    je souhaite binder 2 évènement mais lorsque que bind un click sur div id 1 et que je click sur la checkbox , l'évènement est déclenché :-/

    quelqu'un aurait-il une idée ?

    ( ps j'ai essayé les stopPropagation mais rien n'y fait ... )

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 662
    Par défaut
    bonsoir,

    est-ce que ceci peut répondre à ton problème ?


    [edit]
    Je n'ai pas vu que j'étais dans le forum JQuery
    Mais je laisse ma réponse au cas où...
    [/edit]

  3. #3
    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
    Salut auteur , ça faisait un moment

    je pense effectivement que le drapeau est la seule solution ^^

    merci encore ^^

  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 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    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 661
    Billets dans le blog
    1
    Par défaut
    avec jquery passe par le data pour y mettre ton flag ??
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ceci dit, je suis étonné que stopPropagation() ne fonctionne pas
    Peut-être avec un return false dans le gestionnaire de l'input.
    Au pire, utilise Event.target pour déterminer quel élément à reçu l'événement.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Un ID doit être unique et il doit commencer par un caractère alphabétique (Norme W3C HTML 4) !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="monID1">
    	<p>Un mot pour remplir</p>
    	<div id="monID2">
    		<input type="checkbox" />
    		<p>Un mot pour remplir</p>
    	</div>
    </div>
    Citation Envoyé par Bovino Voir le message
    Au pire, utilise Event.target pour déterminer quel élément à reçu l'événement.
    currentTarget() pour obtenir la division et target() pour l'élément de la division qui a reçu le clic.

    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
    $("#monID1").click(function(e){
    	console.log("monID1, target = ", e.target, ", currentTarget = ", e.currentTarget);
     
    	return false;
    });
     
    $("#monID2").click(function(e){
    	console.log("monID2, target = ", e.target, ", currentTarget = ", e.currentTarget);
     
    	return false;
    });
     
    $("#monID2 > input[type='checkbox']").click(function(e){
    	console.log("input, target = ", e.target, ", currentTarget = ", e.currentTarget);
     
    	return false;
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 662
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    Salut auteur , ça faisait un moment
    Salut. Effectivement cela fait un bout temps Mais je suis toujours là


    Citation Envoyé par Bovino Voir le message
    Au pire, utilise Event.target pour déterminer quel élément à reçu l'événement.
    Citation Envoyé par danielhagnoul Voir le message
    currentTarget() pour obtenir la division et target() pour l'élément de la division qui a reçu le clic.
    je croyais que ces fonctions n'étaient pas compatibles avec tous les navigateurs

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Auteur
    je croyais que ces fonctions n'étaient pas compatibles avec tous les navigateurs
    Là on parle des propriétés de l'objet Event de jQuery, donc si, la syntaxe est uniformisée et compatible
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par Auteur Voir le message
    je croyais que ces fonctions n'étaient pas compatibles avec tous les navigateurs
    C'est la version jQuery : http://api.jquery.com/category/events/event-object/

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  10. #10
    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
    Citation Envoyé par danielhagnoul Voir le message
    Bonjour

    Un ID doit être unique et il doit commencer par un caractère alphabétique (Norme W3C HTML 4) !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="monID1">
    	<p>Un mot pour remplir</p>
    	<div id="monID2">
    		<input type="checkbox" />
    		<p>Un mot pour remplir</p>
    	</div>
    </div>


    Daniel je me permet de souligner que j'étais modo sur DVP et que je sais tout ça lol il s'agit d'un bout de code uniquement pour illustrer mon problème

    Citation Envoyé par danielhagnoul Voir le message
    currentTarget() pour obtenir la division et target() pour l'élément de la division qui a reçu le clic.

    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
    $("#monID1").click(function(e){
    	console.log("monID1, target = ", e.target, ", currentTarget = ", e.currentTarget);
     
    	return false;
    });
     
    $("#monID2").click(function(e){
    	console.log("monID2, target = ", e.target, ", currentTarget = ", e.currentTarget);
     
    	return false;
    });
     
    $("#monID2 > input[type='checkbox']").click(function(e){
    	console.log("input, target = ", e.target, ", currentTarget = ", e.currentTarget);
     
    	return false;
    });

    Au final j'ai fait beaucoup plus simple qu'un flag :
    - Div 1 positionnéé en absolute avec un z-index à 1
    - Div 2 positionnée en absolute a l'extérieur de Div 1 et avec un z-index à 2

    pour le stopPropagation j'ai pas mal recherché le pourquoi cela ne fonctionnait pas et je n'ai pas trouvé de solution

  11. #11
    Membre émérite

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Par défaut
    Pour moi, stopPropagation() fonctionne :

    http://jsfiddle.net/sWcv9/

    html:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="monID1">     <p>Un mot pour remplir</p>     <div id="monID2">         <input type="checkbox" />         <p>Un mot pour remplir</p>     </div> </div>
    jquery:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $("#monID1").click(function(e){     
        alert('pwet');
    });
    $("#monID2 > input[type='checkbox']").click(function(e){     
        e.stopPropagation();
    });

  12. #12
    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
    effectivement sur cet exemple cela fonctionne mais sur mon écran ( un peu plus complexe ) les click sur les checkbox sont bindé en live après avoir été créer suite a une requète en ajax , est ce cela le problème ?

    je vais vérifier ...

  13. #13
    Invité
    Invité(e)
    Par défaut
    salut,

    oui.
    Lorsque tu es en live, tu choppes l'event une fois qu'il est remonté à document.
    Donc si tu es bindé normalement dans ton div, tu vas d'abord chopper l'event dans le div, et apres dans l'input!

  14. #14
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Du coup, tu devrais effectivement vérifier le Event.target lorsque tu reçois l'événement sur la div
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  15. #15
    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
    Merci pour ce complément d'info , j'avais un doute sur le bind en live ^^
    Bovino , yes je dois vérifier d'ou provient l'évènement ^^

    merci à tous

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 662
    Par défaut
    Citation Envoyé par le_chomeur Voir le message

    Daniel je me permet de souligner que j'étais modo sur DVP et que je sais tout ça lol il s'agit d'un bout de code uniquement pour illustrer mon problème
    c'est ça, c'est ça Tu t'es planté dans ton bout de code et puis c'est tout


  17. #17
    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 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    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 661
    Billets dans le blog
    1
    Par défaut
    Daniel je me permet de souligner que j'étais modo sur DVP et que je sais tout ça
    c'est pas une raison ...
    regarde moi je suis bien modo ^^
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  18. #18
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Pour revenir à live(), il est attaché par défaut à la racine du document, mais il est possible de préciser le contexte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('#div2', $('#div1').live('click', callback));
    mais le mieux reste d'utiliser delegate()
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  19. #19
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Daniel je me permet de souligner que j'étais modo sur DVP et que je sais tout ça lol il s'agit d'un bout de code uniquement pour illustrer mon problème
    Une excellente raison pour donner le bon exemple au débutant qui lira vos messages !

    je souhaite binder 2 évènement mais lorsque que bind un click sur div id 1 et que je click sur la checkbox , l'évènement est déclenché :-/
    Si la question n'est pas explicite et posée dans un français correct, "binder 2 évènement", il ne faut pas s'attendre à des miracles.

    Si la question n'est pas complète, si le code donné ne reflète pas le véritable problème la solution proposée ne peut résoudre le problème !

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  20. #20
    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 me permet de souligner le fait qu'en général les initiés comprendront

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Graphics View] Propagation des évènements vers un QGraphicsWidget
    Par afloret dans le forum Qt
    Réponses: 10
    Dernier message: 10/02/2010, 10h16
  2. Propagation des évènements du clavier
    Par monnomamoi dans le forum GTK+
    Réponses: 6
    Dernier message: 30/01/2010, 02h48
  3. Réponses: 4
    Dernier message: 20/10/2009, 18h34
  4. Créer des événements
    Par thebeb dans le forum MFC
    Réponses: 8
    Dernier message: 04/02/2005, 16h45

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