Pregunta

Tengo un elemento contenido en un elemento principal con el active clase, así:

<div class="active">
    <div class="button"></div>
</div>

He jQuery configurar para manejar un clic en mi div button, pero sólo si ese div está contenida por un padre active, así:

$('.active .button').click(function(){
    alert('Button clicked!');
});

Yo uso jQuery para eliminar la clase active de los padres, e incluso después de la eliminación de la clase, la alerta todavía aparece al hacer clic en el botón. Esto parece muy inusual, ya que el botón ya no cumple con los criterios del selector. Sucede en Chrome, Firefox e IE, por lo que parece ser el comportamiento intencional. ¿Me estoy perdiendo de algo? o hay al menos una forma fácil de solucionar esto?

Aquí está un ejemplo sencillo jsFiddle para propósitos de prueba: http://jsfiddle.net/KjuDy/ . Haga clic en un cuadro en la fila superior. Esto hace aparecer una alerta y elimina la clase active, como se esperaba. El problema ocurre cuando se hace clic en un cuadro en la fila superior, incluso después de la clase active se ha ido. Yo esperaría que la alerta no se activará, pero aún lo hace.

¿Fue útil?

Solución

Los controladores se asignan una vez sobre la base de los resultados encontrados en el selector cuando se ejecuta (supongo que en DOM listo).

Modificación de la clase de esos elementos después no afecta a los manejadores que se enlazaron.

Si usted quiere que sea más dinámico, lugar un .delegate() manejador en cambio en un antepasado del elementos,

$('#someContainer').delegate('.active .button','click',function(){
    alert('Button clicked!');
});

Si el único recipiente que abarca todos los elementos es la <body>, a continuación, utilizar que:

$('body').delegate('.active .button','click',function(){
    alert('Button clicked!');
});

Su ejemplo, actualización: http://jsfiddle.net/KjuDy/1 /

Otros consejos

jQuery es la unión a elementos DOM ese partido la primera vez que se unen el evento click.

vivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top