153
// this e works
document.getElementById("p").oncontextmenu = function(e) {
    e = e || window.event;
    var target = e.target || e.srcElement;
    console.log(target);
};

// this e is undefined
function doSomething(e) {
    e = e || window.event;
    var target = e.target || e.srcElement;
    console.log(target);
}
<p id="p" onclick="doSomething(e)">
    <a href="#">foo</a>
    <span>bar</span>
</p>

似たような質問がいくつかあります。

しかし、私のコードでは、orのようにクリックされた子要素を取得しようとしていますaspan

eventでは、イベント ハンドラーに引数として渡す正しい方法、または引数を渡さずにハンドラー内でイベントを取得する方法は何ですか?

編集

を認識してaddEventListenerおりjQuery、イベントをイベント ハンドラに渡すための解決策を提供してくださいinline

4

4 に答える 4

247

eventオブジェクトを渡すには:

<p id="p" onclick="doSomething(event)">

クリックされた子を取得しますelement(パラメーターと共に使用する必要がありeventます:

function doSomething(e) {
    e = e || window.event;
    var target = e.target || e.srcElement;
    console.log(target);
}

elementそれ自体 (DOMElement)を渡すには:

<p id="p" onclick="doThing(this)">

jsFiddle のライブ例を参照してください。

上記のように の名前を指定できますが、別の方法として、ハンドラーがここで説明されているようにパラメーターにeventアクセスすることもできます。リンクには、さらに多くの追加ドキュメントがあります。event

于 2013-05-06T17:57:31.667 に答える
22

インライン イベントは関数として実行されるため、単に引数を使用できます。

<p id="p" onclick="doSomething.apply(this, arguments)">

function doSomething(e) {
  if (!e) e = window.event;
  // 'e' is the event.
  // 'this' is the P element
}

受け入れられた回答で言及されている「イベント」は、実際には関数に渡される引数の名前です。世界大会とは関係ありません。

于 2015-01-25T17:10:43.827 に答える