¿Cómo puedo activar un evento si se agrega o cambia una clase CSS usando jQuery? ¿El cambio de una clase CSS activa el change()
evento jQuery ?
jquery
css
jquery-events
usuario237060
fuente
fuente
Respuestas:
Cada vez que cambie una clase en su secuencia de comandos, puede usar a
trigger
para generar su propio evento.pero por lo demás, no, no hay una forma preparada de disparar un evento cuando cambia una clase.
change()
solo se dispara después de que el foco deja una entrada cuya entrada ha sido alterada.Más información sobre jQuery Triggers
fuente
changeColor
evento y todos los objetos que se suscriben a ese evento pueden reaccionar en consecuencia.En mi humilde opinión, la mejor solución es combinar dos respuestas de @ RamboNo5 y @Jason
Me refiero a anular la función addClass y agregar un evento personalizado llamado
cssClassChanged
fuente
$()
, cuando comienza la acción real.cssClassChanged
evento a un elemento, debe tener en cuenta que se activará incluso cuando su hijo cambie de clase. Por lo tanto, si por ejemplo no desea activar este evento para ellos, simplemente agregue algo como$("#YourExampleElementID *").on('cssClassChanged', function(e) { e.stopPropagation(); });
después de su enlace. De todos modos, muy buena solución, ¡gracias!Si desea detectar el cambio de clase, la mejor manera es usar Observadores de mutación, que le da control total sobre cualquier cambio de atributo. Sin embargo, debe definir el oyente usted mismo y agregarlo al elemento que está escuchando. Lo bueno es que no necesita activar nada manualmente una vez que se agrega el oyente.
En este ejemplo, el detector de eventos se agrega a cada elemento, pero no lo desea en la mayoría de los casos (guardar memoria). Agregue este oyente "attrchange" al elemento que desea observar.
fuente
DOMMutationObserver
.Sugeriría que anule la función addClass. Puedes hacerlo de esta manera:
fuente
Solo una prueba de concepto:
Mira la esencia para ver algunas anotaciones y mantente actualizado:
https://gist.github.com/yckart/c893d7db0f49b1ea4dfb
El uso es bastante simple, solo agregue un nuevo listender en el nodo que desea observar y manipule las clases como de costumbre:
fuente
this[0]
no está definido ... simplemente reemplace el final de las líneas convar oldClass
yvar newClass
con la siguiente asignación:= (this[0] ? this[0].className : "");
utilizando la última mutación jquery
// cualquier código que actualice div que tenga una clase required-entry que esté en $ target como $ target.addClass ('search-class');
fuente
change()
no se dispara cuando se agrega o elimina una clase CSS o cambia la definición. Se activa en circunstancias como cuando se selecciona o no se selecciona un valor de cuadro de selección.No estoy seguro de si quiere decir si la definición de clase CSS se modifica (lo que se puede hacer mediante programación pero es tedioso y generalmente no se recomienda) o si se agrega o elimina una clase a un elemento. No hay forma de capturar de manera confiable este hecho en ninguno de los casos.
Por supuesto, podría crear su propio evento para esto, pero esto solo puede describirse como un aviso . No capturará código que no sea tuyo haciéndolo.
Alternativamente, podría anular / reemplazar los
addClass()
métodos (etc.) en jQuery, pero esto no capturará cuando se haga a través de Javascript vainilla (aunque supongo que también podría reemplazar esos métodos).fuente
Hay una forma más sin activar un evento personalizado
Un complemento de jQuery para monitorear los cambios de CSS del elemento HTML por Rick Strahl
Citando desde arriba
fuente
Buena pregunta. Estoy usando el menú desplegable Bootstrap y necesitaba ejecutar un evento cuando un menú desplegable Bootstrap estaba oculto. Cuando se abre el menú desplegable, el div que lo contiene con un nombre de clase de "grupo de botones" agrega una clase de "abierto"; y el botón en sí tiene un atributo "expandido en aria" establecido en verdadero. Cuando se cierra el menú desplegable, esa clase de "abrir" se elimina del div que contiene y aria-expandido se cambia de verdadero a falso.
Eso me llevó a esta pregunta, de cómo detectar el cambio de clase.
Con Bootstrap, hay "Eventos desplegables" que se pueden detectar. Busque "Eventos desplegables" en este enlace. http://www.w3schools.com/bootstrap/bootstrap_ref_js_dropdown.asp
Aquí hay un ejemplo rápido y sucio de usar este evento en un menú desplegable Bootstrap.
Ahora me doy cuenta de que esto es más específico que la pregunta general que se hace. Pero me imagino que otros desarrolladores que intentan detectar un evento abierto o cerrado con un menú desplegable Bootstrap encontrarán esto útil. Al igual que yo, inicialmente pueden seguir el camino de simplemente tratar de detectar un cambio de clase de elemento (que aparentemente no es tan simple). Gracias.
fuente
Si necesita activar un evento específico, puede anular el método addClass () para activar un evento personalizado llamado 'classadded'.
Aquí como:
fuente
Puede vincular el evento DOMSubtreeModified. Añado un ejemplo aquí:
HTML
JavaScript
http://jsfiddle.net/hnCxK/13/
fuente
si sabe un evento que cambió la clase en primer lugar, puede usar un ligero retraso en el mismo evento y verificar la clase. ejemplo
http://jsfiddle.net/GuDCp/3/
fuente
fuente