Как работает передача информации о событии в функции javascript - PullRequest
0 голосов
/ 05 февраля 2020

** Я уже исправил проблему, но хочу понять, как это работает (просто для любопытства). Я долго искал эту проблему и не нашел подходящего источника информации об этом. Не давайте мне внешних ссылок на сайты 1990 года, пожалуйста. **

Итак, я хотел вызвать функцию, когда пользователь нажимает кнопку ввода. Я хотел передать информацию о том, какая кнопка была нажата (в моем HTML), в мою функцию во внешнем файле скрипта. js и проверить, была ли это кнопка «Enter», чтобы моя программа могла перейти к следующим инструкциям. И я нашел что-то под названием Event Accesing, и оно действительно сработало, но объяснение было настолько ужасным, что сработало, но я не знаю почему. Вот код

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>

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Михал, пока ваш сценарий. Файл js является внешним по отношению к документу HTML, когда вы включаете тег сценария перед импортом всего сценария. 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 одинаковы, но в сообществе программистов общепринято, что «е» означает «событие» - когда вы печатаете Из кода весь день имеет смысл сокращать и сокращать слова, чтобы вы могли писать быстрее, вы можете поместить все, что захотите:

  • myFunction (вещь)

. ... но это не очень полезно, если вы пытаетесь прочитать чей-то код, где «e» или «событие» достаточно описательно, чтобы знать, что функция хочет передать «событие».

В вашей строке кода:

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

у вас есть:

onkeydown="myFunction(event);"

, часть «onkeydown» будет срабатывать при каждом нажатии клавиши, при нажатии клавиши она будет издавать «событие» с большим количеством информации, включая ключ, который как нажата. Ваш код говорит - когда кто-то нажимает клавишу, передайте эту информацию (событие) в myFunction (событие).

Вы можете переписать строку кода следующим образом:

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

... строка 'theInformationFromTheOnkeydownEvent' не является фактической информацией о событии, это просто какое-то слово ( s) мы решили показать, что что-то передается в функцию myFunction, onkeydown будет передавать информацию о событии в myFunction, потому что мы поместили текст в круглые скобки. Если мы не ставим между скобками ничего, тогда onkeydown не будет передавать какую-либо информацию в myFunction (), потому что мы явно запретили это, пропустив такой текст: myFunction ()

Представьте себе:

onkeydown = "myFunction (passTheOnkeydownEventOnToMyFunction)" <- передает информацию в myFunction </p>

onkeydown = "myFunction ()" <- не передает никакой информации в myFunction </p>

... слова внутри скобок в этом случае не имеют значения, потому что onkeydown - это функция DOM (да, это функция, и она возвращает информацию о событии), поэтому при вызове она возвращает информацию о событии в то, что вы хотите, в вашем на случай, если он вернет его в myFunction.

Когда вы посмотрите на файл скрипта. 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!');
  }
}

Надеюсь, это немного прояснит ситуацию?

0 голосов
/ 05 февраля 2020

Вы подключили onkeydown прослушиватель событий в поле input. Поэтому при каждом нажатии клавиши ваша функция myFunction вызывается с данными event.

Такие события keyDown содержат свойство keyCode, и каждая клавиша на клавиатуре имеет уникальный JS keyCode. Вы можете найти отображение над здесь . Для ввода введите код ключа 13.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...