2010-07-08 10 views
7

Mi IE es IE 6. Es bastante viejo, pero tengo que usarlo.Mi IE no es compatible con "document.getElementById()"!

Acabo de encontrar un problema extraño, no es compatible con "document.getElementById()"!

Ver mi archivo de prueba: test.html

<a id="aaa">xxx</a> 
<script> 
aaa = document.getElementById("aaa"); 
alert(aaa); 
</script> 

Al abrir este archivo, es decir, no muestra un diálogo de error:

line: 3 
char: 1 
error: object doesn't support the attribute or method 
code: 0 
URL: file://D:/test.html 

No he cometido algunos errores? Es tan extraño ~

+0

¿Es ese su _entire_ archivo de prueba, o solo fragmentos de él? – Pops

+0

@Lord, es todo el archivo – Freewind

Respuesta

15

Su porque el elemento de anclaje está configurado (en IE6) como una variable global con el nombre aaa. Y luego está tratando de usar otra variable con el mismo nombre.

Si lo cambia a ...

<a id="aaa">xxx</a> 
<script> 
bbb = document.getElementById("aaa"); 
alert(bbb); 
</script> 

debería funcionar.

Ver http://verens.com/2005/03/18/getelementbyid-bug-in-ie6/

+0

No observo ninguna diferencia en el comportamiento entre su código y el suyo usando IE6 en XP. – Pops

+0

@Torgamus - ¿realmente leíste su explicación? –

+0

@meder, por supuesto que sí. Ejecuté ambos juegos de código localmente, y no hay diferencia de comportamiento en mi máquina. Si es solo mi máquina, está bien. Y de los upvotes me doy cuenta de que lo es. No lo estaba acusando de estar equivocado, solo afirmando ese hecho; no hay necesidad de acusarme de no leer. – Pops

0

¿Es esto un fragmento de su archivo html o el archivo completo? En el primer caso, sugeriría agregar las etiquetas apropiadas (<html>, <body>) y un doctype. En segundo lugar, el elemento debe cargarse cuando ejecuta este javascript, pero con IE6, no confiaría en él. Por lo tanto es posible que desee probarlo dentro de una función onload:

window.onLoad = function() { 
    alert(document.getElementById("aaa")); 
} 
+1

Todos los buenos consejos, pero en realidad no es el problema. – Kramii

+0

es todo el archivo. Agregué las etiquetas como dijiste, pero el problema sigue ahí. Y, @barrylloyd es correcto. Pero gracias de todos modos – Freewind

4

Cambiar el nombre de la variable de manera que no es el mismo que el elemento de identificación.

+0

gracias, tienes razón también – Freewind

-3

Funciona si coloca el bloque javascript dentro de la sección de etiqueta <head>. Ahí es donde JS normalmente debería ubicarse de todos modos.

+3

Eso no es verdad, y no se recomienda el rendimiento: http://developer.yahoo.net/blog/archives/2007/07/high_performanc_5.html –

+0

gracias de todos modos :) – Freewind

+1

Hm, punto interesante sobre el movimiento de scripts hacia la parte inferior para acelerar el renderizado. –

4

Según lo observado por barrylloyd, es porque el elemento de anclaje está configurado (en IE6) como una variable global con el nombre aaa. Puede usar var para crear una variable local llamada aaa:

<a id="aaa">xxx</a> 
<script type="text/javascript"> 
var aaa = document.getElementById("aaa"); 
alert(aaa); 
</script> 
+3

Usted y Barry han llegado a la respuesta, pero la terminología necesita un poco de precisión. La variable que crees arriba __es__ una variable global no una variable local. Lo que IE hace es un pequeño truco que si una búsqueda en la cadena de alcance de un identificador falla incluso en el nivel global __then__ busca en su índice de identificadores de elementos, si encuentra una coincidencia, la devuelve. Esto no es algo que hacen otros motores y es realmente molesto que lo haga el IE. – AnthonyWJones

+0

@AnthonyWJones, gran aclaración. ¡Gracias! – Kramii

Cuestiones relacionadas