一尘不染

如何将事件作为参数传递给JavaScript中的内联事件处理程序?

javascript

// 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>

也有人提出过类似的问题。

但是在我的代码中, 我试图获取被单击的子元素,例如aspan

那么event作为参数传递给事件处理程序的正确方法是什么,或者如何在处理程序内部获取事件而不传递参数呢?

编辑

我知道addEventListenerjQuery,请提供将事件传递给inline事件处理程序的解决方案。


阅读 398

收藏
2020-05-01

共1个答案

一尘不染

传递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)">
2020-05-01