2010-07-08 15 views
7

Mein IE ist IE 6. Es ist ziemlich alt, aber ich muss es verwenden.Mein IE unterstützt nicht "document.getElementById()"!

Ich habe gerade ein seltsames Problem gefunden, es unterstützt nicht "document.getElementById()"!

meine Testdatei Siehe: test.html

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

Wenn ich diese Datei von IE öffnen, zeigt, dass es einen Dialog ERROR:

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

Sie machte ich einige Fehler? Es ist so seltsam ~

+0

Ist das Ihre _entire_ Testdatei oder nur Ausschnitte daraus? – Pops

+0

@Lord, es ist die gesamte Datei – Freewind

Antwort

15

Sein, weil das Ankerelement (in IE6) als globalen Variable mit Namen aaa eingerichtet ist. Und dann versuchen Sie, eine andere Variable mit demselben Namen zu verwenden. zu

Wenn Sie es ändern ...

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

sollte es funktionieren.

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

+0

Ich beobachte keinen Unterschied im Verhalten zwischen seinem Code und dir mit IE6 auf XP. – Pops

+0

@Torgamus - hast du tatsächlich seine Erklärung gelesen? –

+0

@meder, natürlich tat ich es. Ich habe beide Codes lokal ausgeführt, und auf meinem Computer gibt es keine Verhaltensunterschiede. Wenn es nur meine Maschine ist, dann gut. Und von den Upvotes erfasse ich, dass es ist. Ich habe ihn nicht beschuldigt, falsch zu liegen, ich habe nur diese Tatsache gesagt; Ich muss mir nicht vorwerfen, nicht gelesen zu haben. – Pops

0

Ist dies ein Ausschnitt Ihrer HTML-Datei oder die gesamte Datei? Im ersten Fall würde ich vorschlagen, die passenden Tags (, <body>) und einen Doctype hinzuzufügen. Zweitens sollte das Element geladen werden, wenn Sie dieses Javascript ausführen, aber mit IE6 würde ich mich nicht darauf verlassen. Daher sollten Sie es nicht in einer onload-Funktion, um zu versuchen:

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

Alle guten Ratschläge, aber nicht wirklich das Problem. – Kramii

+0

es ist die gesamte Datei. Ich füge Tags wie gesagt hinzu, aber das Problem ist immer noch da. Und, @barrylloyd ist korrekt. Aber danke trotzdem – Freewind

4

ändern Sie die Variablennamen so, dass es nicht das gleiche wie die Element-ID.

+0

danke, du hast Recht auch – Freewind

-3

Es funktioniert, wenn Sie den JavaScript-Block innerhalb der Tag Abschnitt platzieren. Dort sollte normalerweise JS platziert werden.

+3

Das ist nicht wahr, und Leistung nicht empfohlen: http://developer.yahoo.net/blog/archives/2007/07/high_performanc_5.html –

+0

danke Sie alle gleich :) – Freewind

+1

Hm, interessanter Punkt über das Verschieben von Skripten nach unten, um das Rendern zu beschleunigen. –

4

Wie von Barrylloyd erwähnt, ist es, weil das Ankerelement (in IE6) als globale Variable mit dem Namen aaa eingerichtet ist. Sie können var verwenden, um eine lokale Variable namens aaa zu erstellen:

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

Sie und Barry haben die Antwort, aber die Terminologie braucht ein wenig Feinheiten. Die Variable, die Sie oben erstellen, ist eine globale Variable und keine lokale Variable. Was IE tut, ist ein kleiner Trick, dass, wenn eine Suche in der Scope-Kette nach einem Bezeichner sogar auf globaler Ebene fehlschlägt, __dann__ seinen Index von Element-IDs durchsucht, wenn er eine Übereinstimmung findet, diese zurückgibt. Dies ist nicht etwas, was andere Motoren tun und es ist wirklich nervig der IE tut es. – AnthonyWJones

+0

@AnthonyWJones, große Klarstellung. Vielen Dank! – Kramii

Verwandte Themen