3 回答
TA贡献1895条经验 获得超3个赞
传递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上的实时示例
TA贡献1770条经验 获得超3个赞
由于内联事件作为函数执行,因此您可以简单地使用arguments。
<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
}
接受的答案中提到的“事件”实际上是传递给函数的参数的名称。它与全球事件无关。
TA贡献1785条经验 获得超4个赞
您不需要通过,默认情况下this已经event自动event.target存在一个对象,其中包含它来自哪个对象。您可以简化语法:
这个:
<p onclick="doSomething()">
将与此一起工作:
function doSomething(){
console.log(event);
console.log(event.target);
}
您不需要实例化该event对象,它已经存在。试试看。并且event.target将包含调用它的整个对象,您之前将其称为“ this”。
现在,如果您从代码中的某处动态触发doSomething(),您会注意到它event是未定义的。这是因为它不是由单击事件触发的。因此,如果您仍想人为触发事件,只需使用dispatchEvent:
document.getElementById('element').dispatchEvent(new CustomEvent("click", {'bubbles': true}));
然后doSomething()将看到event并event.target照常!
无需传递到this任何地方,并且可以使函数签名免于布线信息并简化操作。
添加回答
举报