У чому різниця між Event.target, Event.toElement та Event.srcElement?


87

У мене є такий код:

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

Клацання правою кнопкою миші на a <div class="foo"></div>, повертає це:

div.foo, div.foo, div.foo

Клацання правою кнопкою миші на a <input>, повертає це:

вхід, вхід, вхід

Здається, всі приносять однаковий результат. Чи є ситуація, коли одна з них має інше застосування, ніж інші?

Відповіді:


78

Цільове подія є елементом , до якого відправляється подія:

Об’єкт, на який орієнтована подія , за допомогою потоку подій DOM . Ціль події - це значення Event.target атрибута.

srcElementє IE нестандартним способом отримання target.

Цільове поточну подію є елементом , який має слухач подій , який в даний час викликається:

У потоці подій поточною ціллю події є об’єкт, пов’язаний з обробником подій, який зараз відправляється. Цей об'єкт МОЖЕ бути самою ціллю події або одним із його предків. Поточна ціль події змінюється, коли подія поширюється від об'єкта до об'єкта через різні фази потоку подій. Поточна ціль події - це значення Event.currentTargetатрибута.

Використання thisусередині прослуховувача подій є загальним (і стандартним) способом отримання поточної цілі події.

Деякі події мають relatedTarget:

Використовується для ідентифікації вторинного, EventTargetпов’язаного з подією користувацького інтерфейсу, залежно від типу події.

fromElementі toElementє IE нестандартними способами отримання relatedTarget.


7
Я використовую "toElement" у версії Chrome 60 - ви впевнені, що це "нестандартний спосіб IE"?
PandaWood

2
MSDN каже, що це "нестандартно" і "не використовувати його на виробничих сайтах, що стоять перед Інтернетом": developer.mozilla.org/en-US/docs/Web/API/Event/srcElement
TetraDev

останній хром підтримує "toElement", але не Mozilla Firefox. Мені довелося використовувати властивість "target" для підтримки кількох справ у Mozilla.
Вішаль
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.