2012-06-17 17 views
9

repitió que tienen un grupo de radio con un controlador onchange:IE8 y IE7 onchange evento se activa sólo después de la selección

<input type="radio" name="Q12" value="radio" id="Q12_0" onchange="nextPnl('Q12');"> 
<br/> 
<input type="radio" name="Q12" value="radio" id="Q12_1" onchange="nextPnl('Q12');"> 
     ​ 

function nextPnl(did) 
{ 
document.write(did); 

}​ 

El problema es que en IE8 & IE7, el evento onchange se desencadena selección sólo después de repetidas .

favor ver esta demostración en las herramientas de desarrollo de IE [Modo Navegador] IE8: http://jsfiddle.net/3zwur/2/

+0

puede encontrar una solución general para el IE7/IE8 * * onchange fallo evento en [este artículo] (http://sleeplesscoding.blogspot.ro/2010/01/fixing-ie-onchange-event- for-checkboxes.html). –

Respuesta

16

Esto se debe a un error con los eventos de cambio de IE7 e IE8. En su lugar, debería escuchar el evento click.

Como se muestra en este table on quirks mode, el cambio de evento en los botones de opción y en las casillas de verificación es bastante erróneo en IE7 e IE8.

Puede escuchar el evento click de este modo:

<input type="radio" name="Q12" value="radio" id="Q12_0" onclick="nextPnl('Q12');"> 
<br> 
<input type="radio" name="Q12" value="radio" id="Q12_1" onclick="nextPnl('Q12');"> 

y un tenedor de su violín: http://jsfiddle.net/T7VYL/

Por lo general, el uso de una biblioteca de Javascript como JQuery y YUI hacer su vida más fácil, aunque de mi prueba, no solucionan este error en versiones anteriores de IE.

Si aún desea escuchar el evento de cambio, puede implementar esta solución: http://www.ridgesolutions.ie/index.php/2011/03/02/ie8-chage-jquery-event-not-firing/. Básicamente escucha el evento de clic y luego hace que el elemento active un evento de cambio.

Como demuestra el violín del autor de la pregunta: http://jsfiddle.net/3zwur/3

+0

Acabo de probar JQuery y YUI3, y lamentablemente, no reparan este error en versiones anteriores de IE. Su solución es escuchar el evento de clic o hacer que el evento de cambio se dispare como sigue: http://www.ridgesolutions.ie/index.php/2011/03/02/ie8-chage-jquery-event-not- despedir/ – F21

+0

http://jsfiddle.net/3zwur/3/ –

+0

Esto se disparó prematuramente para mí: el clic se registra antes de que aparezca el cuadro de diálogo de entrada de archivo. Mi solución fue ejecutar la función de cambio en un 'setTimeout' 0 milisegundos después del clic, abusando de la asincronicidad para permitir que la pila se borre (y la acción de entrada del archivo para resolver) antes de que esto ocurra:' onchange = "setTimeout (function deferNextPnl() {nextPnl ('Q12')}, 0) "'. – Barney

3

Otra opción es tener un evento onchange como que ya tiene, y añadir un evento onclick que elimina el foco desde el botón de radio:

<input type="radio" name="Q12" value="radio" id="Q12_0" onclick="this.blur()" onchange="nextPnl('Q12');"> 
0

Otro La solución es colocar el evento onchange en el formulario adjunto a través de jQuery.

$('#form').on('change', function() { 
    $(this).submit(); 
}); 
Cuestiones relacionadas