如何将事件作为参数传递给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>

还有一些类似的问题被问到。

There are some similar questions have been asked.

但是在我的代码中,我试图获得被点击的子元素,例如 a span

But in my code, I'm trying to get child elements who's been clicked, like a or span.

那么将事件作为参数传递给事件的正确方法是什么?处理程序,或者如何在没有传递参数的情况下处理事件?

So what is the correct way to pass event as an argument to event handler, or how to get event inside handler without passing an argument?

我知道 addEventListener jQuery ,请提供一个解决方案,将事件传递到 inline 事件处理程序

I'm aware of addEventListener and jQuery, please provide a solution for passing event to inline event hander.

传递事件 / p>

to pass the event object:

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

获取点击的子元素(应与事件$一起使用c $ c>参数:

to get the clicked child element (should be used with event parameter:

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

传递元素本身(DOMElement):

to pass the element itself (DOMElement):

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

查看 jsFiddle