2008-11-05 10 views
36

Estoy usando la delegación de eventos para escuchar los eventos más bajos en el DOM, pero no está funcionando para un evento onchange en un cuadro de selección. ¿El evento onchange se propaga o sube el DOM?¿Se propaga el evento onchange?

Google no ha podido encontrar una respuesta definitiva.

Respuesta

35

According to specification, "cambiar", "enviar", "reiniciar" debe burbuja y "enfoque" y "desenfoque" no debe burbuja.

Este comportamiento se aplica correctamente en todos los navegadores web, excepto IE < 9, es decir, el cambio, presentar, restablecer la burbuja hacer correctamente en IE> = 9.

Ver https://stackoverflow.com/a/4722246/227299 para una solución de jQuery en viejas versiones de IE

+2

IE <9, es decir, 9 - ok – 4esn0k

+2

Caso de prueba: http://jsfiddle.net/5x8tk/ –

+2

No entiendo el primera frase de esta respuesta, si es verdad, como dices, ese cambio se especifica como burbujeante, y se implementa correctamente en la mayoría de los navegadores. ¿Es eso un error? – enigment

-2

No estoy seguro si recibo la pregunta, pero si quiere decir esto, entonces NO.

<div id="foo"> 
    <select onchange="alert('hi');"> 
    <option>Hello</option> 
    <option>World</option> 
    </select> 
</foo> 

Cuando el div id = "foo" tendría un evento onchange ... burbujea desde la lista de selección?


en una nota relacionada, como digo no puede adjuntar un evento para las opciones dentro de la lista de selección en el IE (así, puede pero no se disparará)

0

no he He tratado con esto durante bastante tiempo, pero la última vez que lo hice, recuerdo que Firefox reconoció el evento en el elemento <SELECT>, mientras que IE6 reconoció solo eventos en las etiquetas <OPTION>. Hasta donde recuerdo.

IE7 no estaba en ese momento.

Por lo tanto, si este es el caso, tiene más sentido no escribir el controlador de eventos en línea y aplicarlo en DOM listo en su lugar, para que no tenga un código contaminado y repetitivo.

+0

Sin IE tiene un error, ya que no registra eventos en los elementos

23

En jQuery 1.4+ el cambio burbujas de eventos en todos los navegadores, incluido IE.

$('div.field_container').change(function() { 
    // code here runs in all browers, including IE. 
}); 
+0

¡Gracias por su pista! – rahmanisback

Cuestiones relacionadas