2010-09-14 13 views
7

Estoy tratando de adjuntar un evento de clic a una casilla de verificación usando JavaScript. A continuación se muestra el HTML y JS.javascript: problema getElementById en IE

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
     <input type="hidden" name="caution_c" value="0"> 
     <input type="checkbox" id="caution_c" name="caution_c" value="1" tabindex="120"> 
     <script type="text/javascript"> 
      var cb = document.getElementById('caution_c'); 
      cb.onclick = function() { 
       alert(1); 
      } 
     </script> 
    </body> 
</html> 

El problema es que en IE, el evento click no se activa. He reducido la ubicación del problema. El problema es que hay una entrada oculta justo antes de la casilla de verificación y ambos elementos tienen el mismo nombre. No estoy seguro de por qué esto está causando un problema (después de todo, estoy usando getElementById y el elemento oculto ni siquiera tiene una identificación).

Existe una razón válida para este tipo de comportamiento (solo IE. Funciona bien en Firefox ... como siempre :()? También, hay una buena solución (podría hacer document.getElementsByName ('caution_c ') [1] pero yo no quiero ...)

Respuesta

13

Internet Explorer se confunde sobre name y id -. que es muy recomendable para el tratamiento de estos dos atributos como si fueran la misma

Puede solucionarlo bien 1) asegúrese de que no haya conflictos de identificación/nombre en su documento, o 2) override IE's native getElementById-method.

Read more about it here.

+4

wow ... ¡eso es una locura! –

+0

@Guarav: Bienvenido a IE. – annakata

+1

@Guarav - ¿demente? Sí. Eso es IE para ti. ¿Por qué crees que tantos desarrolladores web odian Microsoft tan intensamente? Este problema es solo la punta del iceberg. :(Esperemos que la nueva versión de IE 9 mejore las cosas, pero no nos salvará a todos de tener que soportar todas esas versiones viejas de IE que se desmoronan. – Spudley

1

Intente utilizar un evento diferente como onchange o onfocus para ver si eso lo resuelve. Tampoco creo que se dispare onclick si un usuario ingresa las pestañas en la casilla de verificación, que puede ser o no la forma en que pretende que funcione.

-1

Estoy de acuerdo, IE es pobre en entender cosas a nivel html. Prefiero agregar el enlace al botón en lugar de usar elementos de anclaje, ya que IE tiene problemas en el nivel de anclaje con document.getElementById(). Pruebe lo mismo con el botón y funcionará para otros usuarios.