2012-05-16 19 views
12

Me gustaría que mi evento activado en la etiqueta div adquiera la clase "desencadenante". pero, no tengo idea de cómo hacer que escuche el evento de sumar clases.activador de evento en el cambio de clase

¿Podría decirme cómo o qué necesito saber?

<div id="test">test</div> 

<script type="text/javascript"> 
    document.getElementsById.setAttribute("class", "trigger"); 

    function workOnClassAdd() { 
     alert("I'm triggered"); 
    } 
</script> 
+0

hacer por sí que sabes la clase será actualizada con '.setAttribute()' o que están hablando en términos más arbitrarias (es decir, que desea que el controlador de eventos para el fuego incluso si un usuario cambia la clase a través de Firebug)? – jaredhoyt

+1

FYI http://stackoverflow.com/questions/1950038/jquery-fire-event-if-css-class-changed – Dasarp

+0

guau, bien! gracias. –

Respuesta

13

bien hubo mutation events, pero fueron descartadas y el futuro habrá observadores de mutación, pero no será apoyado totalmente por un largo tiempo. Entonces, ¿qué puedes hacer mientras tanto?

Puede usar un temporizador para verificar el elemento.

function addClassNameListener(elemId, callback) { 
    var elem = document.getElementById(elemId); 
    var lastClassName = elem.className; 
    window.setInterval(function() { 
     var className = elem.className; 
     if (className !== lastClassName) { 
      callback(); 
      lastClassName = className; 
     } 
    },10); 
} 

ejemplo de servicio: jsFiddle

+0

¡gracias! buen día. –

+0

Fue criticado por no hacer referencia a su respuesta perfectamente ... De todos modos, incluso se puede hacer utilizando [este complemento fácilmente] (https://github.com/kapetan/jquery-observe) ... Mi respuesta a una pregunta similar es [ aquí] (http://stackoverflow.com/a/23458573/2260614) .. *** Espero que ayude a alguien *** – Bhavik

+2

¡Los observadores de la mutación están disponibles actualmente, woooohoooo! – johndoevodka