Comment puis-je déclencher un événement si une classe CSS est ajoutée ou modifiée à l'aide de jQuery? Le changement d'une classe CSS déclenche-t-il l' change()
événement jQuery ?
jquery
css
jquery-events
user237060
la source
la source
Réponses:
Chaque fois que vous changez une classe dans votre script, vous pouvez utiliser un
trigger
pour déclencher votre propre événement.mais sinon, il n'y a aucun moyen de déclencher un événement quand une classe change.
change()
ne se déclenche que lorsque le focus laisse une entrée dont l'entrée a été modifiée.Plus d'informations sur les déclencheurs jQuery
la source
changeColor
événement, et tous ces objets abonnés à cet événement peuvent réagir en conséquence.À mon humble avis, la meilleure solution consiste à combiner deux réponses de @ RamboNo5 et @Jason
Je veux dire remplacer la fonction addClass et ajouter un événement personnalisé appelé
cssClassChanged
la source
$()
, lorsque l'action réelle commence.cssClassChanged
événement à un élément, vous devez être conscient qu'il sera déclenché même lorsque son enfant changera de classe. Par conséquent, si, par exemple, vous ne souhaitez pas déclencher cet événement pour eux, ajoutez simplement quelque chose comme$("#YourExampleElementID *").on('cssClassChanged', function(e) { e.stopPropagation(); });
après votre liaison. Quoi qu'il en soit, solution vraiment sympa, merci!Si vous souhaitez détecter un changement de classe, la meilleure façon est d'utiliser les observateurs de mutation, ce qui vous donne un contrôle complet sur tout changement d'attribut. Cependant, vous devez définir l'auditeur vous-même et l'ajouter à l'élément que vous écoutez. Heureusement, vous n'avez pas besoin de déclencher quoi que ce soit manuellement une fois l'écouteur ajouté.
Dans cet exemple, l'écouteur d'événements est ajouté à chaque élément, mais vous ne le souhaitez pas dans la plupart des cas (économiser de la mémoire). Ajoutez cet écouteur "attrchange" à l'élément que vous souhaitez observer.
la source
DOMMutationObserver
.Je vous suggère de remplacer la fonction addClass. Vous pouvez le faire de cette façon:
la source
Juste une preuve de concept:
Regardez l'essentiel pour voir quelques annotations et restez à jour:
https://gist.github.com/yckart/c893d7db0f49b1ea4dfb
L'utilisation est assez simple, il suffit d'ajouter un nouveau listender sur le nœud que vous souhaitez observer et manipuler les classes comme d'habitude:
la source
this[0]
n'est pas défini ... remplacez simplement la fin des lignes parvar oldClass
etvar newClass
avec l'affectation suivante:= (this[0] ? this[0].className : "");
en utilisant la dernière mutation jquery
// tout code qui met à jour div ayant une entrée obligatoire de classe qui est dans $ target comme $ target.addClass ('search-class');
la source
change()
ne se déclenche pas lorsqu'une classe CSS est ajoutée ou supprimée ou que la définition change. Il se déclenche dans des circonstances comme lorsqu'une valeur de zone de sélection est sélectionnée ou désélectionnée.Je ne sais pas si vous voulez dire si la définition de classe CSS est modifiée (ce qui peut être fait par programme mais est fastidieux et n'est généralement pas recommandé) ou si une classe est ajoutée ou supprimée à un élément. Il n'y a aucun moyen de capturer de manière fiable ce qui se passe dans les deux cas.
Vous pouvez bien sûr créer votre propre événement pour cela, mais cela ne peut être décrit que comme un conseil . Il ne capturera pas de code qui ne vous appartient pas.
Alternativement, vous pouvez remplacer / remplacer les
addClass()
méthodes (etc) dans jQuery mais cela ne sera pas capturé quand cela sera fait via vanilla Javascript (bien que je suppose que vous pourriez également remplacer ces méthodes).la source
Il y a un autre moyen sans déclencher un événement personnalisé
Un plug-in jQuery pour surveiller les modifications CSS des éléments HTML par Rick Strahl
Citant d'en haut
la source
Bonne question. J'utilise le menu déroulant Bootstrap et j'avais besoin d'exécuter un événement lorsqu'un Bootstrap Dropdown était masqué. Lorsque la liste déroulante est ouverte, le div contenant avec un nom de classe de "bouton-groupe" ajoute une classe de "open"; et le bouton lui-même a un attribut "aria-expand" défini sur true. Lorsque la liste déroulante est fermée, cette classe "open" est supprimée de la div contenant, et aria-expand est passé de true à false.
Cela m'a amené à cette question, de savoir comment détecter le changement de classe.
Avec Bootstrap, il existe des "événements de liste déroulante" qui peuvent être détectés. Recherchez "Dropdown Events" sur ce lien. http://www.w3schools.com/bootstrap/bootstrap_ref_js_dropdown.asp
Voici un exemple rapide et sale d'utilisation de cet événement sur une liste déroulante Bootstrap.
Maintenant, je me rends compte que c'est plus spécifique que la question générale qui est posée. Mais j'imagine que d'autres développeurs essayant de détecter un événement ouvert ou fermé avec une liste déroulante Bootstrap trouveront cela utile. Comme moi, ils peuvent initialement tenter de détecter un changement de classe d'élément (ce qui n'est apparemment pas si simple). Merci.
la source
Si vous devez déclencher un événement spécifique, vous pouvez remplacer la méthode addClass () pour déclencher un événement personnalisé appelé «classadded».
Voici comment:
la source
Vous pouvez lier l'événement DOMSubtreeModified. J'ajoute un exemple ici:
HTML
Javascript
http://jsfiddle.net/hnCxK/13/
la source
si vous connaissez un événement qui a changé la classe en premier lieu, vous pouvez utiliser un léger retard sur le même événement et vérifier la classe. exemple
http://jsfiddle.net/GuDCp/3/
la source
la source