为什么有必要为事件处理添加参数?像这样:
document.addEventListener( 'keydown', function( e ) {
var keyCode = e.keyCode } );
为什么你需要'e
'?为什么函数需要一个参数?
答案 0 :(得分:2)
e
代表事件对象,其中包含有关已触发事件(事件类型,键代码,事件目标等)的信息。事件触发时,此对象将传递给处理函数。
这不是强制性的。如果您不关心按下哪个键,或者关于该事件的任何其他信息,只需跳过该参数即可。
即使您想要这些信息,也可以跳过该参数。你可以通过arguments[0]
得到它,这完全取决于你。它只会降低代码的可读性。
答案 1 :(得分:2)
可以通过作为第一个参数传递的事件对象从处理函数中访问Event接口。
以下简单示例显示了如何将事件对象传递给事件处理函数,并且可以在一个此类函数中使用。
function foo(evt) {
// the evt parameter is automatically assigned the event object
alert(evt);
}
table_el.onclick = foo;
事件处理程序H和事件对象E的事件处理程序处理算法如下:
<强> 1。让回调成为获取事件当前值的结果 处理程序H.
<强> 2。如果回调为空,则中止这些步骤。
第3。按如下方式处理事件对象E:
如果E是ErrorEvent对象,并且事件处理程序IDL属性的类型是OnErrorEventHandler
使用五个参数调用回调,第一个具有E的消息属性值,第二个具有E的文件名属性值,第三个具有E的lineno属性值,第四个具有E的colno属性值,第五个具有E的错误属性的值,并且使用回调将该值设置为E的currentTarget。让返回值为回调的返回值。 [WEBIDL]
否则
使用一个参数调用回调,其值为Event对象E,回调此值设置为E的currentTarget。让返回值为回调的返回值。 [WEBIDL]
在此步骤中,invoke意味着运行跳转到代码入口点算法。
<强> 4。处理返回值如下:
如果事件类型是鼠标悬停 如果事件类型是错误而E是ErrorEvent对象
如果返回值是Web IDL布尔值true,则取消该事件。 如果事件类型是beforeunload
事件处理程序IDL属性的类型是OnBeforeUnloadEventHandler,因此返回值将被强制转换为值null或DOMString。
如果返回值为null,则取消该事件。
否则
如果Event对象E是BeforeUnloadEvent对象,并且Event对象E的returnValue属性的值是空字符串,则将returnValue属性的值设置为返回值。
否则
如果返回值是Web IDL布尔值false,则取消该事件。
答案 2 :(得分:0)
不必..(但事件回调函数总是以事件作为参数调用)
有些情况下您想知道哪个元素触发了事件以及事件是什么。还有一些信息..在您的示例中,e.keycode
可用于确定按下了哪个键。
该参数有很多方法,例如preventDefault()
来阻止事件的默认行为,或者e.target
来获取触发事件的目标。所以你需要将参数e传递为功能参数。
如果您不需要它,请不要将其作为参数传递