当前位置: 首页 > 面试题库 >

参数e(事件)到底是什么?为什么将其传递给JavaScript函数?

简俊楚
2023-03-14
问题内容

好了,当我学习JavaScript时,我阅读的所有书籍和Internet文章都显示了将参数传递给e处理JavaScript事件的函数的代码,例如下面的代码块:

function myEvent(e) {
    var evtType = e.type
    alert(evtType)
    // displays click, or whatever the event type was
}

我一直都接受这种方式,但是现在我有一些问题(这让我很困惑):

  1. e是哪里来的?当我查看整个JavaScript文件时,e似乎根本不存在。
  2. 为什么要将此参数传递e给函数?如果我不传递e给函数,函数会停止工作吗?
  3. 考虑下面的代码块。有一个事件变量(e)传递给匿名内部函数。假设我想在匿名函数之外使用事件对象(可能在该行的上方/下方element.onkeypress)。我怎样才能做到这一点?
    element.onkeypress = function(e) {
    if(e.keyCode) {
        element.keyCode = e.keyCode;
    } else {
        element.keyCode = e.charCode;
    }
    

    };


问题答案:

e很短的event

创建事件的最简单方法是单击页面上的某个位置。

当您单击时,将click触发一个事件。这event实际上是一个对象,其中包含有关刚刚发生的操作的信息。在此示例的情况下,事件将具有诸如单击坐标(event.screenX例如),单击的元素(event.target)等信息。

现在,事件一直在发生,但是您对所有发生的事件都不感兴趣。当你正在感兴趣然而,在一些情况下,当你添加一个事件监听器,你知道会创建活动[1]的元素。例如,您有兴趣知道 用户何时单击“订阅”按钮,并且希望在此事件发生时 执行某些操作

为了对这个事件做一些事情,您将 事件处理程序 绑定到您感兴趣的按钮。将处理程序绑定到元素的方法是do
element.addEventListener(eventName, handler)

eventName是一个字符串,它是您感兴趣的事件的名称,在这种情况下,它将是'click'(针对该click事件)。

处理程序只是一个 函数 ,它在事件发生时会执行某些操作(已执行)。默认情况下,处理程序函数在执行时
event对象(当您感兴趣的事件/操作发生时创建) 作为参数 传递

eventa 定义为处理函数的参数是可选的,但有时(大多数情况下),对于处理函数了解发生的事件很有用。当你 定义它,这是e你在像你提到的那些功能见。请记住,event只是一个普通的javascript对象,上面有很多属性。

希望能有所帮助。

至于第三个问题,现在您应该知道您不能这样做,因为e仅在事件发生时存在。您可以使用处理程序函数,该函数可以在e对象执行时对其进行访问,以将其存储在某个全局变量中并对其进行处理。

[1]并不完全正确,但是更容易理解。说的更正确的话是“将事件侦听器添加到您知道将使事件流过的元素中”。



 类似资料:
  • 问题内容: 在猫鼬文档中,它经常列出某些查询运算符(如)的可选回调,但是,它没有提及回调采用的参数(参数)。他们是什么,我怎么知道? 另外,如果,等都是可选的,我想在结束时指定一个回调,我必须在传递值,或空物体或我可以只指定回调- 和软管做猫鼬知道吗? 问题答案: 对于几乎所有的猫鼬查询,所提供的函数将在文档中所述的节点回调模式 中用两个参数调用: 在Mongoose中将回调传递给查询的任何地方,

  • 本文向大家介绍在React中怎么将参数传递给事件?相关面试题,主要包含被问及在React中怎么将参数传递给事件?时的应答技巧和注意事项,需要的朋友参考一下 如果使用箭头函数声明函数,调用方式: 不传参:this.func1,如果不传参,事件参数默认会自己添加上 传参: (e) => {this.func1(e,'param1', 'param2')},如果传参,事件参数需要手动传递过来 如果不用箭

  • 我知道 当您同步一个代码块时,您可以指定要使用哪个对象的锁作为锁,这样,例如,您可以使用某个第三方对象作为这段代码的锁。这使您能够在单个对象中拥有多个用于代码同步的锁。 但是,我不明白是否需要将参数传递给块。因为我是否传递String的实例并不重要,一些随机类的实例传递给同步块,因为同步块可以完美地工作,而不管传递给块的参数如何。 所以我的问题是,如果无论如何同步块阻止两个线程同时进入关键部分。那

  • 问题内容: 我当时在Swinject上工作,但问题困扰着我。我已经整整一天都被困在那里。我怀疑这是由于Swift是一种静态类型的语言,但我不确定。 我在这个操场上总结了我的问题 我尝试了不同的解决方案,例如test.self或type(of:test),但它们都不起作用。 所以我想我不能用提供为变量的通用参数来调用函数? 问题答案: 与 协议元类型有两种。对于某些协议和符合类型: A 描述协议本身

  • 问题内容: 我知道 同步代码块时,可以指定要将哪个对象的锁用作锁,例如,可以将某些第三方对象用作此代码段的锁。这样一来,您就可以在一个对象中拥有多个锁来进行代码同步。 但是,我不明白需要将参数传递给该块。因为我是否传递String的实例都没有关系,所以某些随机类的实例作为同步块可以完美地工作,而与传递给该块的参数无关。 所以我的问题是 ,无论如何,同步块是否阻止两个线程同时进入关键部分。 那为什么

  • 问题内容: 我正在看ribs.js截屏视频中出色的peepcode演示代码。在其中,主干代码全部封装在传递给jQuery对象的匿名函数中: 在我自己的主干代码中,我将所有代码包装在jQuery DOM’ready’事件中: 第一种方法的目的/优势是什么?这样做会创建一个匿名函数,然后立即将jQuery对象作为函数参数传递来执行该匿名函数,从而有效地确保$是jQuery对象。这是唯一的观点-保证jQ