2009-07-17 41 views
18
document.click = check; 

function check(e) 
{ 
    var obj = document.getElementById('calendar_widget'); 

    if (obj != 'null') 
    { 
     if (e.target.id != 'show_calender') 
      obj.style.display='none'; 
    } 
} 

Lỗi trong Internet Explorer: e.target.id không được xác định.IE e.target.id không hoạt động

+0

Thật khó để kiểm tra bài đăng của bạn trước khi đăng? Lần này tôi đã sửa mã cho bạn, ít nhất một chút. Bạn muốn người khác dành thời gian xem mã của bạn, vì vậy hãy dành thời gian để làm cho nó dễ đọc. Vẫn còn một số định dạng để làm cho bạn. – OregonGhost

+0

i dont knw làm thế nào để chèn mã .. nơi nào tôi nhận được thông tin này – coderex

+0

Khi bạn đặt mã trong, chọn nó và nhấn nút với "101 010" trên nó – Greg

Trả lời

40

IE không hỗ trợ thuộc tính đích, thay vào đó, họ sử dụng srcElement.

Thay đổi:

if (e.target.id != 'show_calender') 

tới:

if ((e.target || e.srcElement).id != 'show_calender') 

Bạn cũng có thể cần phải thêm video này vào đầu chức năng của bạn:

if (!e) e = window.event 

mã cuối cùng của bạn sẽ trông như thế này :

function check(e) { 
    if (!e) e = window.event; 
    var obj = document.getElementById('calendar_widget'); 

    if (obj != 'null') { 
     if ((e.target || e.srcElement).id != 'show_calender') 
       obj.style.display='none'; 
    } 
} 
+1

nếu IE không hỗ trợ thuộc tính 'target', thì mã của bạn' e.target.id' sẽ là lỗi tham chiếu null ngay sau khi IE truy cập nó. –

+0

Tôi nghĩ rằng '(e.target.id || e.srcElement.id)' sẽ vẫn ném một lỗi trong IE, vì nó sẽ cố truy cập thuộc tính 'id' của thuộc tính' target', nhưng 'target' hiện không tồn tại. –

+0

Bắt tốt. Tôi đã khắc phục vấn đề. – Prestaul

2

IE không chuyển đối tượng sự kiện dưới dạng tham số, đối tượng sự kiện được truy cập dưới dạng số nhận dạng chung được gọi là event. Ngoài ra, nó không sử dụng mục tiêu thuật ngữ, thay vào đó nó sử dụng srcElement.

Do đó các mã tương đương cho IE là: -

function check() 
{ 

    var obj = document.getElementById('calendar_widget'); 

    if (obj != 'null') 
    { 
     if (event.srcElement.id != 'show_calender') 
      obj.style.display='none'; 
    } 
} 

của nó vì lý do này mà javascript framework như JQuery rất phổ biến.

+0

Cảm ơn bạn, công việc của nó. :) – coderex

2

Bạn đã gặp sự cố cổ điển khi xử lý sự cố trình duyệt chéo. Tôi khuyên bạn nên sử dụng thư viện như Prototype, JQuery, YUI hoặc MooTools để xử lý việc này theo cách dễ dàng hơn và dễ hiểu hơn. Vấn đề là IE không vượt qua đối tượng sự kiện. Thay vào đó, nó có thể được tìm thấy như một đối tượng toàn cục.

5

Internet Explorer không chuyển đối tượng sự kiện đến trình xử lý sự kiện - nó đặt nó làm thuộc tính của đối tượng cửa sổ thay thế. Ngoài ra, nó sử dụng srcElement thay vì target. Hãy thử


document.click = check; 

function check(e) 
{ 
    var target = e ? e.target : window.event.srcElement; 
    var obj = document.getElementById('calendar_widget'); 

    if (obj != 'null') 
    { 
     if (target.id != 'show_calender') 
       obj.style.display='none'; 
    } 
} 

+0

Ngoài ra, đó là 'document.onclick = ...', không phải 'document.click = ...' –

+0

Ồ, jQuery này ... :) –

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