Sự khác biệt giữa Event.target, Event.toElement và Event.srcElement là gì?


87

Tôi có mã sau:

document.oncontextmenu = function(evt) {
    evt = evt || window.event;
    console.log(evt.target, evt.toElement, evt.srcElement);
};

Bằng cách nhấp chuột phải vào a <div class="foo"></div>, trả về:

div.foo, div.foo, div.foo

Bằng cách nhấp chuột phải vào a <input>, trả về:

đầu vào, đầu vào, đầu vào

Tất cả dường như mang lại cùng một kết quả. Có tình huống nào mà một trong số chúng có cách sử dụng khác với các bộ khác không?

Câu trả lời:


78

Các mục tiêu sự kiện là yếu tố mà sự kiện này được gửi đi:

Đối tượng mà sự kiện được nhắm mục tiêu bằng cách sử dụng luồng sự kiện DOM . Mục tiêu sự kiện là giá trị của Event.target thuộc tính.

srcElementlà một cách không chuẩn của IE để lấy target.

Các mục tiêu sự kiện hiện tại là yếu tố trong đó có người nghe sự kiện mà hiện nay được gọi:

Trong luồng sự kiện, mục tiêu sự kiện hiện tại là đối tượng được liên kết với trình xử lý sự kiện hiện đang được gửi đi. Đối tượng này CÓ THỂ là chính mục tiêu sự kiện hoặc một trong những tổ tiên của nó. Mục tiêu sự kiện hiện tại thay đổi khi sự kiện truyền từ đối tượng này sang đối tượng khác qua các giai đoạn khác nhau của dòng sự kiện. Mục tiêu sự kiện hiện tại là giá trị của Event.currentTargetthuộc tính.

Sử dụng thisbên trong trình xử lý sự kiện là một cách phổ biến (và tiêu chuẩn) để có được mục tiêu sự kiện hiện tại.

Một số sự kiện tử tế có relatedTarget:

Được sử dụng để xác định phụ EventTargetliên quan đến sự kiện giao diện người dùng, tùy thuộc vào loại sự kiện.

fromElementtoElementlà những cách không chuẩn của IE để lấy relatedTarget.


7
Tôi đang sử dụng "toElement" trong Chrome phiên bản 60 - bạn có chắc đó là "cách không chuẩn của IE" không?
PandaWood,

2
MSDN nói rằng đó là "phi tiêu chuẩn' và 'không sử dụng nó trên các trang web sản xuất phải đối mặt với web': developer.mozilla.org/en-US/docs/Web/API/Event/srcElement
TetraDev

chrome mới nhất hỗ trợ "toElement" nhưng không hỗ trợ Mozilla Firefox. Tôi đã phải sử dụng thuộc tính 'target' để hỗ trợ một số trường hợp trong Mozilla.
Vishal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.