Задать вопрос
@so_easyy

Как создать проверку для слушателя onkeydown (для тренажера печати)?

Всем доброго времени суток!
Суть в чем: делаю небольшой проект на ванильном js, и немного запуталась.

У меня есть массив из 5 рандомных букв английского алфавита, ставлю слушатель, чтобы проверять, нужная ли клавиша нажата, и пробегаю по массиву циклом, чтобы сопоставить значения. По итогу за 1 нажатие клавиши цикл пробегает по всем элементам (а мне нужно проверить один, и перейти к следующему элементу массива только после нажатия клавиши второй раз).
Как построить код так, чтобы была схема: нажатие клавиши - проверка одного элемента массива - нажатие клавиши - проверка последующего элемента массива? Чувствую, что истина где-то рядом, но она от меня все время ускользает :(
Спасибо!

let arr = []
for (let i = 0; i < 10; i++) {
      let rand = Math.floor(Math.random() * lettersArr_en.length);
      arr.push(lettersArr_en[rand]) // рандомный элемент массива  
}

console.log(arr);


document.onkeydown = function(e) {
      for(let i = 0; i < arr.length; i++) {
            if (arr[i] === e.key) {
                        console.log('=')
                  } else {
                        console.log('no')
                  }  
      }
}
  • Вопрос задан
  • 57 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@furashcka
Возможно стоит использовать объект для букв? С ним вообще не понадобится цикл, проверка будет за одно нажатие, мне кажется код проще получается

const randomLetters = {
    q: true,
    w: true,
    e: true,
    r: true,
    t: true,
    y: true,
  };

  const successAnswers = [];

  document.onkeydown = function (e) {
    const key = e.key.toLowerCase();
    const latter = randomLetters[key];

    if (latter === true) {
      successAnswers.push(key);
      delete randomLetters[key];

      console.log(`randomLetters :>>`, randomLetters);
      console.log(`successAnswers :>>`, successAnswers);
    }
  };


Ну а если всё таки нужен массив, то зачем вам пробегаться по массиву "самостоятельно", используйте indexOf, он вернёт нужный index элемента, если найдёт совпадение, если не найдёт вернёт -1

https://developer.mozilla.org/en-US/docs/Web/JavaS...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы