Ввод Javascript запуск функции при вводе определенного текста

#javascript #html #function #input

#javascript #HTML #функция #ввод

Вопрос:

Итак, я хотел бы запустить функцию, когда пользователь вводит определенную команду в поле ввода. Например, когда пользователь вводит что-то вроде «Я хочу сэндвич с мороженым», он запускает функцию, которая добавит 1 сэндвич с мороженым в их инвентарь. Но если бы они набрали что-то вроде ‘Gerfabujohn’, это сказало бы вам, что это не команда. У меня уже есть функция, которая добавляет сэндвич в инвентарь, это не проблема. Вот мой js:

 function readCommand() {
  let readInput = document.querySelector('#commandInput').value
  if (readInput.value = 'I want an ice cream sandwich') {
    giveIceCreamSandwich()
  } else {
    alert(`Not a command`);
  }
}
  

и мой html:

 <label for="commandFeild"> Enter Command: </label>
<input type="text" id="commandInput" name="commandFeild"><br><br>
<button class="triggerInput" onclick="readCommand()"> Run Command </button>
  

Здесь я пытаюсь использовать функцию querySelector, чтобы найти значение поля ввода, используя его идентификатор. Пока эта часть, похоже, работает. Я использовал консоль.войдите, чтобы зарегистрировать значение readInput, и он зарегистрировал правильную команду из поля ввода. Это оператор if, который вообще не работает. По-видимому, независимо от того, что я ввожу, он возвращает true и все равно запускает функцию, не обращая внимания на условия, которые должны быть выполнены, чтобы это было true.

Я часами искал решение, и я действительно удивлен, что не нашел ответа, поскольку это, по-видимому, основная функция оператора ввода в первую очередь. Любая помощь будет оценена, спасибо!

Комментарии:

1. Одиночный = означает «установить значение», двойной == означает «сравнить значения». Итак, это то, что вам нужно изменить: readInput== 'I want an ice cream sandwich' также удалите value , поскольку вы уже ссылаетесь на него.

2. let readInput = document.querySelector('#commandInput').value вам нужно удалить .value , как вы вызываете это в инструкции If ниже

Ответ №1:

Две проблемы:

  1. = предназначен для присваивания, а не для проверки равенства — вы хотите использовать === .
  2. Вы сохраняете value входные readInput данные, поэтому вам не нужно ссылаться value на него:
 function readCommand() {
  let readInput = document.querySelector('#commandInput').value
  //           ↓ no .value, it's already here -----------↑
  if (readInput === 'I want an ice cream sandwich') {
  //             ↑ === vs =
    giveIceCreamSandwich()
  } else {
    alert(`Not a command`);
  }
}
  

Комментарии:

1. Мне было интересно, почему все выглядело правильно и не работало, спасибо за ваш ответ, вы спасли.

2. Как вы даете несколько команд для использования, и каждая из них запускает другую функцию?

3. @DustinAngeletti Существует так много способов создания архитектуры, что это было бы слишком долго для комментария. Тем не менее, вы могли бы создать словарь (объектный литерал), где ключи (команды) имеют значения (функции), которые могут быть вызваны, если значение из ввода соответствует ключу.