2012-02-09 31 views
7

Tôi mệt mỏi vì viết jQuery, vì vậy tôi quyết định tìm hiểu một số JavaScript thô. Thứ gì đó trong attachEvent của IE làm tôi bối rối. Đây là mã.Cái gì 'này' trong attachEvent của IEE

var btn = document.getElementById('myBtn'); 

btn.onclick = function(){ 
    alert(window.event.srcElement === this); //true, I know why. 
}; 

btn.attachEvent('onclick', function(event){ 
    alert(event.srcElement === this); //fasle, but why? 
}); 

tôi cố gắng sử dụng IE tích hợp trong công cụ gỡ lỗi, nhưng nó chỉ nói với tôi rằng 'này' là một đối tượng, nhưng không có gì hơn ... vì vậy những gì là 'này' trong attachEvent của IE?

+0

thử xuất 'điều này' vào bảng điều khiển và xem. sử dụng 'console.log (this)' – Joseph

+0

Tôi thử điều đó, nhưng IE chỉ nói với tôi đó là một đối tượng, không có gì hơn. – shawjia

+1

bạn có phát hiện lỗi đánh máy "srcElemnt" không? Nếu không có "e", thuộc tính sự kiện đó sẽ không được xác định (và! == điều này). – Bergi

Trả lời

7

Trong vòng một xử lý sự kiện ràng buộc bởi các attachEvent phương pháp IE-cụ thể, this đề cập đến window đối tượng toàn cầu:

btn.attachEvent('onclick', function(event) { 
    alert(this === window); // true 
} 

Ngược lại, trong một event handler ràng buộc bởi các tiêu chuẩn addEventListener phương pháp, this đề cập đến Phần tử DOM mà từ đó trình xử lý sự kiện đã được kích hoạt.

0

đây là tham chiếu ngữ cảnh và tham chiếu cửa sổ khi sự kiện nhấp xảy ra, bởi vì đó là ngữ cảnh duy nhất tồn tại tại thời điểm đó.

0

Tôi nghĩ U viết sai chính tả một từ.



    btn.attachEvent('onclick', function(event){ 
      alert(event.**srcElement** === this); 
    }); 

Và tôi đã thử nghiệm hàm tương ứng addEventListener trong chrome và ff, cả hai đều trả về true.

IE trả về sai. Có lẽ vì IE đối phó với btn.onclick = fn; và btn.attachEvent() với cách khác. IE chuyển giá trị toàn cầu (cửa sổ) tới phương thức btn.attachEvent(). Bạn có thể kiểm tra cửa sổ === này, nó trả về giá trị đúng.

Mọi nhận xét về nó?

+0

đã được sửa. vẫn sai. – shawjia

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