为什么keydown事件需要参数?

时间:2014-12-25 05:44:09

标签: javascript

为什么有必要为事件处理添加参数?像这样:

  document.addEventListener( 'keydown', function( e ) {
                        var keyCode = e.keyCode } );

为什么你需要'e'?为什么函数需要一个参数?

3 个答案:

答案 0 :(得分:2)

e代表事件对象,其中包含有关已触发事件(事件类型,键代码,事件目标等)的信息。事件触发时,此对象将传递给处理函数。

这不是强制性的。如果您不关心按下哪个键,或者关于该事件的任何其他信息,只需跳过该参数即可。

即使您想要这些信息,也可以跳过该参数。你可以通过arguments[0]得到它,这完全取决于你。它只会降低代码的可读性。

答案 1 :(得分:2)

source

可以通过作为第一个参数传递的事件对象从处理函数中访问Event接口。

以下简单示例显示了如何将事件对象传递给事件处理函数,并且可以在一个此类函数中使用。

function foo(evt) {
  // the evt parameter is automatically assigned the event object
  alert(evt);
}
table_el.onclick = foo;

source

事件处理程序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传递为功能参数。

如果您不需要它,请不要将其作为参数传递