IwanQ
@IwanQ
Плохие времена часто дают прекрасные возможности

Перебор объекта?

Здравствуйте.

Есть код - https://jsfiddle.net/a2ns1zbe/

Подскажите пожалуйста, почему если я ввожу слово test, ничего не происходит, хотя должно выводиться ok, но когда я ввожу stop, все работает как надо.

Подскажите пожалуйста, почему это происходит?
  • Вопрос задан
  • 116 просмотров
Решения вопроса 4
@MagicMight
no magic quotes
И можно заменить
inp.addEventListener('keyup',()=>{
for(let key in codes){
	  if(inp.value === key){
	    info.textContent = `${codes[key]}`;
	    info.style.display = 'block';
	  } else {
	    info.style.display = 'none';
	  }
	}; 
});

на
inp.addEventListener('keyup',()=>{

  if(inp.value in codes) {
  	info.textContent = `${codes[inp.value]}`;
    info.style.display = 'block';
  }
  else {
  	info.style.display = 'none';
  }

});
Ответ написан
Комментировать
Потому что в цикле for вы не делаете выход из цикла после того как значение было найдено(16 строчка break):
https://jsfiddle.net/ot5mjuvw/2/
Но вообще проверку ключа можно сделать и без цикла (как в ответе MagicMight)
Ответ написан
else блок не нужен. во второй раз он сбрасывает display дива на none
Ответ написан
Комментировать
ArsenyMatytsyn
@ArsenyMatytsyn Куратор тега JavaScript
Руководитель frontend направления, предприниматель
Ты перебираешь массив значений, что в принципе ведет к такому выстрелу себе в ногу. Так как последовательность без break решает, как будет вести себя скрипт за тебя.

Я бы рекомендовал двинуть хотя бы в эту сторону. Чуть больше безопасности от самого себя.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы