用于事件的参数是什么?我怎么知道?

时间:2017-09-12 14:08:36

标签: javascript html

element.onkeypress = function(e) {
                    if(e.keyCode) {
                        element.keyCode = e.keyCode;
                    } else {
                        element.keyCode = e.charCode;
                    }
                };

同样在java脚本中,还有

<input onChange="a(event)"/>
<script>
function a(event) { 
    alert(event.target.value);
}
</script>

作为参数接收,我如何知道是否必须为参数而不是e设置事件?第二个例子不会工作,如果参数是除了事件以外的任何东西都不是javascript?

5 个答案:

答案 0 :(得分:3)

使用on*属性或addEventListener绑定事件处理程序时,事件对象将作为第一个参数传递。您可以像编写函数表达式或函数声明时那样自己命名。您可以命名参数的正常限制适用(即它们必须是有效的标识符名称)。 eventeevt是该变量的通用名称。

使用on* 属性绑定事件处理程序时,您只编写函数体(即function (event) {}是隐含的。对象将在event变量中提供。

答案 1 :(得分:0)

function(e)是带参数的普通函数。参数可以包含您想要的任何名称。

onkeypress内,浏览器提供的事件具有一个始终名为event的特殊参数。如果将它传递给您自己的函数,该函数可以像往常一样使用它想要的任何参数名称。

答案 2 :(得分:0)

使用现代标准设置事件回调时,客户端会自动将对事件对象的引用传递给每个事件回调函数。它永远是第一个论点。

你不需要做任何事情来实现这一目标。您需要做的就是捕获引用,您可以使用任何您喜欢的命名参数。由于您是参数的接收者,因此您选择的名称不必与任何内容匹配。你可以调用任何东西(这是一个有效的标识符)。

现在,您的示例才有效,因为在网页的全局范围内,window对象公开了一个event对象,这就是a(event)正在访问的对象。:

<input onChange="a(event)"/>
<script>
  function a(event) { 
    alert(event.target.value);
  }
</script>

但是,这不是应该建立事件的现代方式。不应使用内联HTML事件属性(onclickonchange等)( here's why )。

现代方法如下,请注意事件回调函数(a)的注册并不表示事件的任何内容,但实际函数能够获取它所需的信息通过期待一个论点。

&#13;
&#13;
document.querySelector("input").addEventListener("change", a);
function a(anyNameIsGoodHere) { 
  alert(anyNameIsGoodHere.target.value);
}
&#13;
<div>Type anything into the text field and then hit TAB</div>
<input>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以通过在每个事件之后添加console.log(&#34;此处为某些文本&#34;)来查找在特定事件上触发的参数。

您可以在控制台中查看日志

答案 4 :(得分:-1)

当您定义一个函数时,您可以调用任何您想要的参数(event,e,foo等...),当您调用该函数时,您必须使用正确的名称来传递给函数。

<input onChange="a(event)"/>
  <script>
    function a(foo) { 
      alert(foo.target.value);
    }
  </script>

<input onChange="b(event)"/>
  <script>
    function b(aParameter) { 
      alert(aParameter.target.value);
    }
  </script>