В чем разница между 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это нестандартный способ получения файлов target.

Целевое текущее событие является элементом , который имеет слушатель событий , который в настоящее время вызывается:

В потоке событий текущая цель события - это объект, связанный с обработчиком событий, который в настоящее время отправляется. Этот объект МОЖЕТ быть целью события или одним из его предков. Текущая цель события изменяется по мере того, как событие распространяется от объекта к объекту через различные фазы потока событий. Текущая цель события - это значение Event.currentTargetатрибута.

Использование thisвнутри прослушивателя событий является распространенным (и стандартным) способом получения текущей цели события.

У некоторых добрых событий есть relatedTarget:

Используется для идентификации вторичного EventTargetобъекта, связанного с событием пользовательского интерфейса, в зависимости от типа события.

fromElementи toElementявляются нестандартными для IE способами получения relatedTarget.

Ориол
источник
7
Я использую toElement в Chrome версии 60 - вы уверены, что это «нестандартный способ IE»?
PandaWood
2
MSDN сообщает, что это «нестандартный» и «не используйте его на
рабочих
последняя версия Chrome поддерживает toElement, но не Mozilla Firefox. Мне пришлось использовать свойство target для поддержки нескольких случаев в Mozilla.
Vishal