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 la création d'un nouvel élément de classe


Sujet :

jQuery

Vue hybride

DJ Caësar 9114 Détecter la création d'un... 18/07/2013, 11h40
v1cent comment sont ajoutés les... 18/07/2013, 13h44
Bovino Oui, la solution de v1cent... 18/07/2013, 13h54
DJ Caësar 9114 Merci à vous deux pour vos... 18/07/2013, 14h07
v1cent tu as deux solutions : *... 18/07/2013, 15h50
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de DJ Caësar 9114
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 135
    Par défaut Détecter la création d'un nouvel élément de classe
    Bonjour,
    J'ai parcouru le forum (et la doc officielle) et je ne trouve pas la solution à mon problème:
    J'ai une certaine classe (appellée "diapo"), qui gère les diaporamas de mon site. Au premier chargement de la page, j'ai un qui lance un . Ainsi, tous mes diaporamas sont initialisés correctement après le chargement de la page. Cette initialisation exécute plusieurs fonctions qui ne sont pas très utiles ici (réglages de CSS, de clicks, de modifications du DOM, etc.).

    Au fur et à mesure de la navigation, d'autres diaporamas sont créés, mais non initialisés (forcément, le document.ready ne s'éxécute qu'une fois). Mon but est que dès qu'un nouvel élément apparaît dans la page, l'initialisation de ce diaporama s'exécute.

    J'ai tout d'abord cherché dans la fonction "live", puis j'ai vu qu'elle était devenue obsolète et qu'il fallait lui préférer "on". Cependant, "on"
    demande un "event" dans son appel, mais moi je n'ai pas d'event particulier ("click", etc.). Existe-t-il un event qui pourrait détecter la création d'un nouvel objet d'une classe?

    Merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

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

    Informations forums :
    Inscription : Août 2012
    Messages : 328
    Par défaut
    comment sont ajoutés les diaporamas ? tu n'a pas une fonction qui fait ça ? dans ce cas tu as juste à executer la même fonction sur ces éléments que sur ceux manipulés dès l'intialisation

  3. #3
    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 : 54
    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
    Oui, la solution de v1cent est la bonne.
    Tu dois externaliser le code exécuté dans le .each() dans une fonction et l'appeler comme tu le fais au démarrage et ensuite sur les nouveaux éléments créés.
    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

  4. #4
    Membre confirmé Avatar de DJ Caësar 9114
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 135
    Par défaut
    Merci à vous deux pour vos réponses.
    Cependant, je n'ai pas l'impression que ça résolve mon problème:
    - je peux externaliser mon code du each en faisant un callback, du genre (ce n'est pas le code exact mais l'esprit, je tiens à préciser).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var callback = function (diap) {...}
    puis

    diapo.each(function(callback(this)))

    Le problème c'est: comment savoir quand lancer la fonction "callback" dès lors qu'un nouvel élément de classe "diapo" arrive dans le dom?
    Je pense que la piste du "on" est intéressante: n'existe-t-il pas un moyen de faire une sorte de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    diapo.on(create, callback)

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

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

    Informations forums :
    Inscription : Août 2012
    Messages : 328
    Par défaut
    tu as deux solutions :
    * soit tu fait cette fonction, puis tu l'appelle après avoir modifié la classe (je suppose qu'il y a bien quelque chose qui modifie la classe ? ça tombe pas du ciel quand même ! )
    * soit tu fait avec on comme tu le souhaite, sauf qu'il n'y a pas d'évènements correspondant, donc il faudrait :
    - réécrire les fonctions de modification de classe de jquery pour lancer un évènement (classchange par exemple)
    - à tous les changements de classe si l'élément possède bien la classe dont tu as besoin, tu regarde si la fonction a déjà été créée par le passé (donc il faut quelque chose pour le savoir, par exemple un attribut data si ton plugin jquery ne gère pas)
    - si c'est pas le cas, tu appelle la fameuse fonction

    Et ça ne prendra pas en compte les cas de figure ou la classe change sans passer par jQuery, et ça risque de poser plein de souci (s'amuser à modifier le noyau de jQuery c'est pas une super super idée)

    bref, tu ferais mieux de créer une fonction qui modifie la classe et initialise le diaporama dans la foulée et pas comme tu envisage ce qui serait plein d'inconvénients

  6. #6
    Membre confirmé Avatar de DJ Caësar 9114
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 135
    Par défaut
    Mmmm.. Je ne comprends pas trop ce que tu veux dire!
    En fait la diapo ne tombe pas du ciel (pas encore, j'ai pas trouvé la fonction pour ça!), mais quand on effectue certaines opérations, elle est chargée à l'aide d'un "load" (une grosse DIV qui est chargée dans une div existante). Elle ne se trouve donc pas dans le DOM chargé initialement, d'où mon intérêt pour le "on", qui apparemment, si je lis bien la doc, répercute la fonction handler aux futurs éléments du DOM.

    Ceci dit je suis intrigué par ta première solution: qu'entends-tu par appeler une fonction une fois qu'une classe est modifiée? Il existerait un événement qui détecterait la fin de modification?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2014, 12h03
  2. Création d'une nouvelle DB
    Par ghyosmik dans le forum Outils
    Réponses: 2
    Dernier message: 25/11/2005, 17h08
  3. Réponses: 2
    Dernier message: 12/08/2005, 22h15
  4. copier les attributs d un nouvel élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 23/09/2004, 10h05

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