javascript - 如何将有关事件的信息传递给 JavaScript 函数

标签 javascript html function object

**我已经解决了这个问题,但我想了解它是如何工作的(只是出于好奇)。我已经搜索这个问题很长时间了,但没有找到有关此问题的正确信息来源。请不要给我 1990 年网站的外部链接。 **

基本上,我想在用户单击输入按钮时调用一个函数。我想将有关按下哪个按钮(在我的 HTML 中)的信息传递给外部 script.js 文件中的函数,并检查它是否是“Enter”按钮,以便我的程序可以继续执行下一个指令。我发现了一个叫做“事件访问”的东西,它确实有效,但解释太可怕了,它有效,但我不知道为什么。这是代码。

function myFunction(e) {
  if (e.keyCode == 13) {
      alert('It works!');
  }
}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>To-do list</title>
  <link rel="stylesheet" href="css/style.css">
</head>
<body>
  <div id="entryText">
  <h1>Good evening!</h1>
  <h2>This is to-do list app written in plain javascript :)</h2>
  <h2>Type your task and click enter on your keyboard</h2>
  </div>
  <div id="input-container">
      <input type="text" id="type_here" placeholder="New task here.." onkeydown="myFunction(event);">
  </div>

<script src="js/script.js" defer></script>
</body>
</html>

最佳答案

当您在将整个 script.js 代码导入 HTML 文档之前包含 script 标记时,您的 script.js 文件位于 HTML 文档外部。因此,可以公平地说,下面的示例是浏览器如何解释代码的(您甚至可以这样编写):

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>To-do list</title>
  <link rel="stylesheet" href="css/style.css">
</head>
<body>
  <div id="entryText">
  <h1>Good evening!</h1>
  <h2>This is to-do list app written in plain javascript :)</h2>
  <h2>Type your task and click enter on your keyboard</h2>
  </div>
  <div id="input-container">
      <input type="text" id="type_here" placeholder="New task here.." onkeydown="myFunction(event);">
  </div>

<script>
    function myFunction(e) {
      if (e.keyCode == 13) {
          alert('It works!');
      }
    }
</script>
</body>
</html>

代码myFunction(e)采用单个参数,在您使用字母“e”来表明您的函数采用一个参数的情况下。我们倾向于使用一些东西来表明我们期望传递给函数的内容,在本例中我们期望的是“事件”,有些人会这样编写函数

  1. myFunction(事件)
  2. myFunction(e)

1 和 2 是相同的,但编程社区普遍认为“e”代表“事件”——当您整天键入代码时,缩短和缩写单词是有意义的,这样您就可以编写代码更快,你可以放任何你想要的东西,比如:

  • myFunction(东西)

...但是,如果您试图阅读某人的代码,那么这并不是很有帮助,因为“e”或“事件”的描述性足以知道该函数想要传递一个“事件”。

在您的代码行上:

<input type="text" id="type_here" placeholder="New task here.." onkeydown="myFunction(event);">

你有:

onkeydown="myFunction(event);"

每次按下一个键时,“onkeydown”部分都会触发,当按下一个键时,它将发出一个“事件”,其中包含大量信息,包括按下的键。您的代码是说 - 当有人按下某个键时,将该信息(事件)传递到 myFunction(event) 上。

您可以像这样重写代码行:

<input type="text" id="type_here" placeholder="New task here.." onkeydown="myFunction(theInformationFromTheOnkeydownEvent);">

...字符串“theInformationFromTheOnkeydownEvent”不是实际的“事件”信息,它只是我们选择的一些单词来显示某些内容正在传递给 myFunction 函数,onkeydown 将传递事件信息到 myFunction 因为我们在括号之间包含了一些文本。如果我们没有在括号之间放置任何内容,那么 onkeydown 不会将任何信息传递给 myFunction(),因为我们已经通过省略这样的文本明确告诉它不要这样做:myFunction()

想象一下:

onkeydown="myFunction(passTheOnkeydownEventOnToMyFunction)"<- 将信息传递到 myFunction

onkeydown="myFunction()"<- 不将任何信息传递到 myFunction

...在这种情况下括号内的单词并不重要,因为 onkeydown 是一个 DOM 函数(是的,它是一个函数,并且它返回事件信息),所以当它被调用时,它将返回事件信息给你想要它,在你的情况下它会将其返回到你的 myFunction。

当您查看 script.js 文件和 myFunction 代码时,您决定将“e”放入括号内,您可以选择“event”或“eventData”。唯一重要的是,您在整个 myFunction 代码块中使用相同的字符串,下面的三个示例工作相同,并且可以与您的 HTML 代码一起使用,我刚刚更改了括号之间的“单词”(有些比其他更具描述性) ):

function myFunction(e) {
  if (e.keyCode == 13) {
      alert('It works!');
  }
}

function myFunction(event) {
  if (event.keyCode == 13) {
      alert('It works!');
  }
}

function myFunction(thing) {
  if (thing.keyCode == 13) {
      alert('It works!');
  }
}

function myFunction(eventData) {
  if (eventData.keyCode == 13) {
      alert('It works!');
  }
}

我希望这能让事情变得更清楚一些?

关于javascript - 如何将有关事件的信息传递给 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60081971/

相关文章:

html - Bootstrap 3 - 页脚中的链接不适用于移动版本

function - 在 R 中,用于跳出函数而不执行其余部分的关键字是什么?

javascript - 根据表单输入生成动态 url

html - 在 Firefox 上,溢出 : hidden works, 但滚动条和空格仍然存在

javascript - 上下文绑定(bind)语法

javascript - 异步图片加载和SEO

c++ - 如何将值转换为 vector

c - 函数声明如何工作?

javascript - 为什么 0 == ""在 JavaScript 中为真

javascript - 使用 Meteor 中的 Javascript 事件在多个预设字段之间切换 MongoDB 文档