如何将事件作为parameter passing给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作为parameter passing给事件处理程序的正确方法是什么,或者如何在不传递参数的情况下在事件处理程序中获取事件?

编辑

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

传递event对象:

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

得到被点击的子元素(应该与event参数一起使用:

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

传递元素本身(DOMElement):

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

看到jsFiddle的生动的例子

由于内联事件是作为函数执行的,所以你可以简单地使用参数

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

被接受的答案中提到的“事件”实际上是传递给函数的参数的名称。 这与全球事件无关。