2010-09-14 14 views
7

Sto tentando di associare un evento click a una casella di controllo utilizzando JavaScript. Di seguito è mostrato l'HTML e il JS.javascript: getElementById problema in 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> 

Il problema è che in IE, l'evento click non viene attivato. Ho ristretto la posizione del problema. Il problema è che c'è un input nascosto appena prima della casella di controllo e entrambi questi elementi hanno lo stesso nome. Non sono sicuro del motivo per cui ciò sta causando un problema (dopotutto, sto usando getElementById e l'elemento nascosto non ha nemmeno un ID).

C'è un motivo valido per questo tipo di comportamento (solo IE. Funziona bene in Firefox ... come sempre :()? C'è anche una buona soluzione (potrei fare semplicemente document.getElementsByName ('caution_c ') [1] ma io non voglio ...)

risposta

13

Internet Explorer si confonde su name e id -. è altamente raccomandato per il trattamento di questi due attributi, come se fossero la stessa

Puoi risolvere il problema con 1) assicurati che non ci siano conflitti di id/nome nel tuo documento, oppure 2) override IE's native getElementById-method.

Read more about it here.

+4

wow ... è solo folle !!!! –

+0

@Garav: Benvenuti in IE. – annakata

+1

@Garav - insano? Sì. Questo è IE per te. Perché pensi che così tanti sviluppatori web odino microsoft così intensamente. Questo problema tecnico è solo la punta dell'iceberg. :(Speriamo che la nuova versione di IE 9 migliorerà le cose, ma non ci salverà tutti dal dover supportare tutte quelle vecchie versioni friabili di IE. – Spudley

1

Provare a utilizzare un evento diverso, ad esempio onchange o onfocus, per vedere se lo risolve. Inoltre, non credo che lo onclick verrà attivato se un utente fa clic sulla casella di controllo, che può essere o meno il modo in cui si intende che funzioni.

-1

Sono d'accordo, IE è povero nel comprendere le cose a livello HTML. Preferisco aggiungere il link al pulsante piuttosto che usare gli elementi di ancoraggio, poiché IE ha problemi a livello di ancoraggio con document.getElementById(). Prova lo stesso a pulsante e funzionerà per altri utenti.