2010-07-08 113 views
7

我的IE瀏覽器是IE 6.它很舊,但我必須使用它。我的IE不支持「document.getElementById()」!

我剛發現一個奇怪的問題,它不支持「document.getElementById()」!

見我的測試文件:test.html的

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

當我用IE打開這個文件,也顯示了一個錯誤對話框:

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

難道我犯了一些錯誤?這很奇怪〜

+0

是您的_entire_測試文件,還是僅從其中摘錄? – Pops 2010-07-08 14:18:28

+0

@主,這是整個文件 – Freewind 2010-07-09 03:01:51

回答

15

其因錨固件設置(在IE6)作爲名稱爲aaa的全局變量。然後你試圖使用另一個同名的變量。

如果將其更改爲...

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

它應該工作。

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

+0

我沒有注意到他的代碼和你在XP上使用IE6的行爲之間的差異。 – Pops 2010-07-08 14:26:18

+0

@Torgamus - 你真的讀過他的解釋嗎? – 2010-07-08 14:36:44

+0

@meder,當然,我做到了。我在本地運行了兩套代碼,並且在我的機器上沒有任何行爲差異。如果它只是我的機器,那很好。從upvotes我收集它是。我並沒有指責他錯了,只是說明了這個事實;沒有必要指責我沒有閱讀。 – Pops 2010-07-08 14:46:17

0

這是你的html文件或整個文件的片段?在第一種情況下,我會建議添加適當的標籤(<html><body>)和文檔類型。其次,元素應該在你執行這個javascript時加載,但是對於IE6,我不會依賴它。因此,你可能會想嘗試一個onload函數內部:

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

所有的好建議,但實際上並不是問題。 – Kramii 2010-07-08 14:26:30

+0

它是整個文件。我如你所說添加標籤,但問題仍然存在。而@barrylloyd是正確的。但是,謝謝你們一樣 – Freewind 2010-07-08 16:50:28

4

改變變量名稱,以便其不一樣的元素ID。

+0

謝謝你,你也是對的 – Freewind 2010-07-08 16:51:00

-3

如果您將javascript塊放置在<head>標記部分內,它將起作用。無論如何,JS通常應該放置在哪裏。

+3

這是不正確的,並且在性能方面不推薦:http://developer.yahoo.net/blog/archives/2007/07/high_performanc_5.html – 2010-07-08 14:26:04

+0

謝謝你都一樣:) – Freewind 2010-07-08 16:51:35

+1

嗯,關於將腳本移動到底部以加速渲染的有趣點。 – 2010-07-08 22:26:52

4

正如barrylloyd指出的那樣,它是因爲錨元素(在IE6中)作爲名稱爲aaa的全局變量設置的。您可以使用var創建一個名爲aaa的局部變量:

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

你和巴里已經得到了答案,但術語需要一點點修飾。你在上面創建的變量__is__是一個全局變量而不是局部變量。 IE所做的是一個小竅門,即如果在全局級別上搜索標識符的作用域鏈,則__then__會搜索其元素標識符的索引,如果它找到匹配項,則會返回它。這不是其他引擎所做的事情,它真的讓IE很惱火。 – AnthonyWJones 2010-07-08 14:51:08

+0

@AnthonyW瓊斯,很好的說明。謝謝! – Kramii 2010-07-09 09:00:41