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 non produite


Sujet :

jQuery

  1. #1
    Membre habitué
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Par défaut Propagation non produite
    Bonjour à tous.

    J'ai un souci de propagation avec un répertoire .on(). Grosso modo, dans mon cas suivant je ne récupère qu'une partie des div.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <div id="right">
        <div id="insideright">
            <div class="bloc-0">
                <div id="num-0">
                     <img src="image.jpg" title="titre" />
                </div>
            </div>
        </div>
    </div>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('div').on("click", function(event){
            console.log($(this));
    	});
    J'essaie de récupérer la balise titre de l'image, mais pour simplifier ici je cherche juste à voir ce qu'il me trouve au click. Et la console me renvoie qu'il a trouvé uniquement #right et #insideright.
    Les divs .bloc-0 et #num-0 et sont créés au chargement de la page après un loop dans un xml, mais le click se passe bien après. Pourquoi n'ai je pas de propagation jusqu'au dernier enfant? J'ai bien compris qu'on pouvait stopper la propagation mais quid de l'approfondissement?

    Merci d'avance

  2. #2
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut
    Il s'agit d'un grand principe en JS et en gestion d’événement. On ne le répétera jamais assez je pense mais si l'événement est déclaré avant la création des éléments qui en sont cible il ne se passe... rien

    Deux solutions pour palier ce problème soit on déclare toujours les événements après la création des éléments qui doivent être ciblé, soit on utilise la délégation d'événement simplissime avec jQuery:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $(document).on("click", 'div', function(event){
            console.log($(this));
    });

    On attache l'événement sur le document et non sur l'élément qui en est cible et on fournis un filtre des éléments descendants qui vont activer l'événement.

  3. #3
    Membre habitué
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Par défaut
    Merci ton aide et ses précisions me sont très utiles. Je vais tester ça dans la matinée et appronfondir pour en arriver là où je veux.

  4. #4
    Membre habitué
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Par défaut
    "The document element is available in the head of the document before loading any other HTML, so it is safe to attach events there without waiting for the document to be ready."
    http://api.jquery.com/on/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $(document).on({
    	mouseenter: function(){
    		$(this).find('truc').stop().animate({ 'bottom' : -100 }, 150)
    	},
    	mouseleave: function(){
    		$(this).find('truc').stop().animate({ 'bottom' : 0 }, 150)
    	}
    }, "div[id*='mondiv']");
    Et qui marche très bien, puisque le DOM a été peuplé et donc le javascript voit les élèments.

    Merci beaucoup

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

Discussions similaires

  1. [DATASTAGE8.5] Fichier XML non produit
    Par mickra dans le forum DataStage
    Réponses: 0
    Dernier message: 04/04/2013, 17h02
  2. Liste des produits non livrés
    Par alouca dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/04/2010, 19h00
  3. Produits non vendus cette année
    Par how_much dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/07/2009, 17h08
  4. Produits non vendus
    Par sebkun69 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/03/2008, 18h47
  5. fonction Produit Matriciel non booleen
    Par roman.nedellec dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/11/2007, 10h35

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