如何将事件作为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>
有一些类似的问题已经被问到。
但在我的代码中, 我试图让被点击的子元素像a
或span
。
那么将event
作为parameter passing给事件处理程序的正确方法是什么,或者如何在不传递参数的情况下在事件处理程序中获取事件?
编辑
我知道addEventListener
和jQuery
,请提供将事件传递给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 }
被接受的答案中提到的“事件”实际上是传递给函数的参数的名称。 这与全球事件无关。