2010-06-25 14 views
10

tengo el siguiente código, que funciona perfectamente en Chrome/FF:onchange/onclick en una casilla de verificación no funciona en IE

chkbx_send_demo.onchange = function(){ 
    if(sel_template.selectedIndex <= 0 && chkbx_send_demo.checked == true){ 
     alert("Choose a Template"); 
     sel_template.selectedIndex = 1; 
    } 
    if(chkbx_send_demo.checked == false){ 
     sel_template.selectedIndex = 0; 
    } 
} 

Pero no va a funcionar en el IE. Intenté cambiar el evento a chkbx_send_demo.onclick y todavía no funciona.

+1

Probablemente ya lo haya comprobado, pero: ¿está seguro de que "chkbx_send_demo" hace referencia a la casilla de verificación correcta? ¿Puedes hacer una alerta y confirmar esto? Además, el mismo código exacto workd en FF? – Nivas

Respuesta

16

Internet Explorer solo activa el evento onchange cuando la casilla de verificación pierde el foco (onblur). ver también aquí:
http://krijnhoetmer.nl/stuff/javascript/checkbox-onchange/
y aquí:
http://bytes.com/topic/javascript/answers/92116-onchange-checkbox

+1

El comportamiento de IE es correcto según la especificación HTML sobre onchange "El evento onchange ocurre cuando un control pierde el foco de entrada y su valor se ha modificado desde la obtención del foco. Este atributo se aplica a los siguientes elementos: INPUT, SELECT y TEXTAREA." http://www.w3.org/TR/REC-html40/interact/scripts.html#adef-onchange –

1

¿Seguro onclick no funciona? ¿Revisaste los errores de javascript?

las siguientes obras en Internet Explorer 7 (no tienen IE6 para poner a prueba)

<html> 
    <head> 
     <script> 
      function text() 
      { 
       alert(document.getElementById("cbxTest").checked); 
      } 
     </script> 
    </head> 
    <body> 
     <input type="checkbox" name="cbxTest" id="cbxTest" onclick="text()"/> 
     <label for="cbxTest"> Test </label> 
    </body> 
</html> 

Nota: Esto es sólo para onclick. OnChange funciona de manera diferente en IE, ver la respuesta de GOsha.

+0

Estoy 100% seguro de que no está funcionando (puse alertas en cada paso de la función onclick) pero curiosamente no hay errores de javascript cuando depuro el script. –

+0

Probablemente ya lo haya verificado, pero: ¿está seguro de que "chkbx_send_demo" hace referencia a la casilla de verificación correcta? ¿Puedes hacer una alerta y confirmar esto? Además, el mismo código exacto trabajó en FF? – Nivas

+0

no puedo creerlo, hice una alerta (chkbx_send_demo.type); y obtuve un 'oculto' ... cómo puede document.getElementById ("demo") obtener este elemento: en lugar de este: ?? (y ¿por qué esto solo sucede en IE?) Pero de todos modos, gracias, todo está claro ahora –

0

mi código JS es ahora algo como esto:

if(navigator.appName == "Microsoft Internet Explorer"){ 
      alert("IE"); 
      chkbx_send_demo.onclick = function(){ 
       alert("HI"); 
       if(sel_template.selectedIndex <= 0 && chkbx_send_demo.checked == true){ 
        alert("Choose a Template"); 
        sel_template.selectedIndex = 1; 
       } 
       if(chkbx_send_demo.checked == false){ 
        alert("HI"); 
        sel_template.selectedIndex = 0; 
       } 
       alert("HI"); 
      } 
     } 
     else 
     { 
      chkbx_send_demo.onchange = function(){ 
       if(sel_template.selectedIndex <= 0 && chkbx_send_demo.checked == true){ 
        alert("Choose a Template"); 
        sel_template.selectedIndex = 1; 
       } 
       if(chkbx_send_demo.checked == false){ 
        sel_template.selectedIndex = 0; 
       } 
      } 
     } 

No hay errores de javascript, pero el código no se ejecuta en IE y realmente no puede entender por qué.

+0

¿También puede publicar su HTML? ¿Cómo obtuviste 'chkbx_send_demo'? –

Cuestiones relacionadas