2010-07-08 42 views
7

IE của tôi là IE 6. Nó khá cũ, nhưng tôi phải sử dụng nó.Trình duyệt của tôi không hỗ trợ "document.getElementById()"!

Tôi vừa tìm thấy sự cố lạ, nó không hỗ trợ "document.getElementById()"!

Xem tập tin thử nghiệm của tôi: test.html

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

Khi tôi mở tập tin này bằng IE, có thấy một hộp thoại LỖI:

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

Tôi thực hiện một số sai lầm? Rất lạ ~

+0

Đây là tệp thử nghiệm _entire_ của bạn hay chỉ đoạn trích từ nó? – Pops

+0

@Lord, đó là toàn bộ tập tin – Freewind

Trả lời

15

của nó bởi vì các yếu tố neo được thiết lập (trong IE6) như là một biến toàn cầu với tên aaa. Và sau đó bạn đang cố gắng sử dụng một biến khác có cùng tên.

Nếu bạn thay đổi nó để ...

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

cần làm việc.

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

+0

Tôi không quan sát bất kỳ sự khác biệt nào về hành vi giữa mã của anh ấy và của bạn khi sử dụng IE6 trên XP. – Pops

+0

@Torgamus - bạn có thực sự đọc lời giải thích của mình không? –

+0

@meder, tất nhiên là tôi đã làm. Tôi chạy cả hai bộ mã cục bộ và không có sự khác biệt về hành vi trên máy của tôi. Nếu nó chỉ là máy của tôi, thì tốt. Và từ upvotes tôi thu thập rằng nó được. Tôi đã không cáo buộc anh ta là sai, chỉ nói rằng thực tế; không cần phải buộc tội tôi không đọc. – Pops

0

Đây có phải là đoạn mã của tệp html của bạn hoặc toàn bộ tệp không? Trong trường hợp đầu tiên, tôi khuyên bạn nên thêm các thẻ thích hợp (<html>, <body>) và một loại tài liệu. Thứ hai, các phần tử nên được nạp khi bạn thực hiện javascript này, nhưng với IE6, tôi sẽ không dựa vào nó. Vì vậy, bạn có thể muốn thử nó bên trong một chức năng onload:

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

Tất cả các lời khuyên tốt, nhưng không thực sự là vấn đề. – Kramii

+0

là toàn bộ tệp. Tôi thêm các thẻ như bạn đã nói, nhưng vấn đề vẫn còn đó. Và, @barrylloyd là chính xác. Nhưng cảm ơn tất cả các bạn – Freewind

4

Thay đổi tên biến sao cho không giống với id phần tử.

+0

cảm ơn bạn, bạn cũng đúng quá – Freewind

-3

Nó hoạt động nếu bạn đặt khối javascript trong phần thẻ <head>. Có JS thường được đặt anyway.

+3

Điều đó không đúng và hiệu suất không được khuyến nghị: http://developer.yahoo.net/blog/archives/2007/07/high_performanc_5.html –

+0

cảm ơn tất cả các bạn đều giống nhau :) – Freewind

+1

Hm, điểm thú vị về việc di chuyển các tập lệnh xuống dưới cùng để tăng tốc độ hiển thị. –

4

Như đã lưu ý bởi barrylloyd, vì phần tử neo được thiết lập (trong IE6) dưới dạng biến toàn cục có tên aaa. Bạn có thể sử dụng var để tạo biến cục bộ được gọi là aaa:

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

Bạn và barry đã có câu trả lời nhưng thuật ngữ cần một chút finessing. Biến bạn tạo ở trên __is__ biến toàn cục không phải biến cục bộ. Những gì IE làm là một mẹo nhỏ rằng nếu tìm kiếm lên chuỗi phạm vi cho một định danh không thành công ngay cả ở cấp độ toàn cầu __then__ nó tìm kiếm chỉ mục của các id phần tử của nó, nếu nó tìm thấy một kết quả nó trả về nó. Đây không phải là một cái gì đó động cơ khác làm và nó thực sự gây phiền nhiễu của IE hiện nó. – AnthonyWJones

+0

@AnthonyWJones, làm rõ tuyệt vời. Cảm ơn! – Kramii

Các vấn đề liên quan