Event.target、Event.toElement、Event.srcElementの違いは何ですか?


87

私は次のコードを持っています:

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

でマウスの右ボタンをクリックすると、次のよう<div class="foo"></div>になります。

div.foo、div.foo、div.foo

でマウスの右ボタンをクリックすると、次のよう<input>になります。

入力、入力、入力

すべて同じ結果をもたらすようです。それらの1つが他とは異なる用途を持っている状況はありますか?

回答:


78

イベントターゲットは、イベントが送出されている要素です。

DOMイベントフローを使用してイベントの対象となるオブジェクト。イベントターゲットは、 属性の値です。Event.target

srcElementを取得するためのIEの非標準的な方法targetです。

現在のイベントのターゲットは、現在呼び出されるイベントリスナーを持つ要素です。

イベントフローでは、現在のイベントターゲットは、現在ディスパッチされているイベントハンドラーに関連付けられているオブジェクトです。このオブジェクトは、イベントターゲット自体またはその祖先の1つである可能性があります。現在のイベントターゲットとして変化イベント各種を通じてオブジェクトからオブジェクトに伝播イベントフローの。現在のイベントターゲットは、Event.currentTarget属性の値 です。

thisイベントリスナー内で使用することは、現在のイベントターゲットを取得するための一般的な(そして標準的な)方法です。

いくつかの種類のイベントにはrelatedTarget:があります

EventTargetイベントのタイプに応じて、UIイベントに関連するセカンダリを識別するために使用されます。

fromElementおよびtoElementは、を取得するためのIEの非標準的な方法relatedTargetです。


7
Chromeバージョン60で「toElement」を使用しています。これは「IEの非標準的な方法」ですか?
パンダウッド2017

2
:MSDNは、それが「非標準」と『ウェブ』に向け生産現場でそれを使用していないと言うdeveloper.mozilla.org/en-US/docs/Web/API/Event/srcElement
TetraDev

最新のChromeは「toElement」をサポートしていますが、MozillaFirefoxはサポートしていません。Mozillaでいくつかのケースをサポートするには、「target」プロパティを使用する必要がありました。
Vishal 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.