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 :

Détecter les modifications du DOM dans une div


Sujet :

jQuery

  1. #1
    Invité
    Invité(e)
    Par défaut Détecter les modifications du DOM dans une div
    Bonjour à tous.

    Dans ma page, j'ai une div #list qui contient une liste de div de classe .call. Des filtres permettent à l'internaute de modifier cette liste de div dynamiquement.

    Pour une autre fonctionnalité, j'ai associé à toutes les div de la classe .call un écouteur d'événements.
    Je l'ai fait avec jQuery de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $().ready(function () {
    			$('.call').click(function (e) {
    				e.preventDefault();
    				alert('click!');
    			});
    		});
    Le problème : lorsque les filtres remanient le contenu de #list (suppression et ajout de div .call), l'écouteur d'événements ne fonctionne plus.

    J'aimerais donc pouvoir l'associer à toute la classe .call dès que le DOM est modifié à l'intérieur de #list.

    Est-ce possible ? Si oui, comment ?
    (De préférence avec Vanilla JS et/ou jQuery)

    Merci.

  2. #2
    Inactif  

    Homme Profil pro
    développeur Vala
    Inscrit en
    Février 2011
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : développeur Vala
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 478
    Points : 3 700
    Points
    3 700
    Par défaut
    si c'est comme le getElementsByClassName en js, il doit te retourner un tableau contenant tous les éléments ayant la classe demandée.
    donc, pour ajouter un onclick à une div, je pense que tu devrais faire une boucle qui ajoute cet évènement à chaque div du tableau
    je n'ai jamais essayé ceci avec jQuery, donc désolé si cela ne marche pas
    (marquer un post résolu si vous êtes satisfait de la réponse )
    ma page launchpad https://launchpad.net/~inizan-yannick
    ma page github : https://github.com/inizan-yannick

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Selon la version de jquery, il existe plusieurs possibilités pour répondre à tes besoins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $(selector).live(events, data, handler);                // jQuery 1.3+
    $(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
    $(document).on(events, selector, data, handler);        // jQuery 1.7+
    Le principe est (en gros, voire trés gros) que cela attache un gestionnaire d'évènement au document. Ensuite, lorsqu'un évènement est déclenché, cet évènement se propage jusqu'à son plus grand parent (à savoir le document) et si l'élément déclencheur correspond au sélecteur utilisé, la fonction attaché à l'évènement est exécutée.

    De cette façon, même les éléments ajoutés dynamiquement une fois que le DOM est chargé, interagissent...

    Cela donnerait dans ton cas si tu utilises jquery 1.3+ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $(document).ready(function () {
    			$('.call').live("click",function (e) {
    				e.preventDefault();
    				alert('click!');
    			});
    		});
    A+

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci rotrevrep pour ta réponse. Je crains cependant que tu n'aies pas saisi mon problème : l'extrait de script que j'ai publié fonctionne parfaitement. Et il a même l'intérêt de mieux fonctionner que la méthode getElementsByClassName qui, elle, n'est pas disponible sur des navigateurs comme IE7 ou Safari 3.

    Merci BaBeuH, également, pour cette solution !
    Concernant ma version de jQuery, j'inclus dans mon <head> le chemin vers la librairie maintenue par Google (http://ajax.googleapis.com/ajax/libs.../jquery.min.js), donc je dois être à la 1.7+.

    J'ai essayé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $(document).on('click', '.call_applet', function(e) {
    			e.preventDefault();
    			alert('click');
    		});
    Et ça fonctionne comme sur des roulettes.

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

Discussions similaires

  1. Détecter les modifications faites dans une zone de texte avec la souris
    Par nosferapti dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 24/09/2009, 09h48
  2. Réponses: 2
    Dernier message: 31/01/2009, 18h52
  3. détecter les points d'extrimités dans une matrice
    Par kawther dans le forum Images
    Réponses: 0
    Dernier message: 15/01/2009, 22h52
  4. Réponses: 1
    Dernier message: 26/09/2008, 16h38
  5. Interdire les modifications des données dans une JTable
    Par markfish55 dans le forum Composants
    Réponses: 3
    Dernier message: 19/12/2006, 15h48

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