Kurolesov
@Kurolesov
Начинающий девелопер

Как поймать фокус на input?

Добрый день.
Решаю простую задачу по js. Есть форма с тремя инпутами. Мне нужно поймать фокус на втором инпуте, т.е. когда пользователь в него кликнул мышью или пришел к нему с помощью кнопки tab.
пробую сделать это с помощью установки обработчика focus для нужного инпута.
Вот так выглядит код.
<!DOCTYPE html>
<html>
  <head> </head>
  <body>
    <form action="">
      <input id="input1" type="text" /> 
      <input id="input2" type="text" />
      <input id="input3" type="text" />
    </form>
  </body>
</html>
<script>
  var input2 = document.getElementById("input2");
  input2.addEventListener("Focus", focusInput2());
  function focusInput2() {
    alert("Focus2");
  }
</script>

Не могу понять, почему
а) при обновлении страницы f5 появляется алерт "Focus2" (я ведь назначаю его на событие focus для input2)
б) при установке курсора в поле input2 наоборот, ничего не происходит (ожидал, что алерт появится именно тут, т.к. назначил обработчик именно на это событие)

Подскажите, пожалуйста, почему у формы именно такое поведение?
И как сделать так, чтобы алерт появлялся при фокусировке input2?

PS: По условию задачи html код менять запрещено.
  • Вопрос задан
  • 1488 просмотров
Решения вопроса 2
zendor
@zendor
В вашем примере ошибка: вы вызываете функцию focusInput2 в addEventListener вместо того чтобы передать ссылку на нее и она вызывает alert сразу же и возвращает undefined в addEventListener.
const input = document.getElementById('input2');
input.addEventListener('focus', function() {
  console.log('focus 2');
});
Ответ написан
Комментировать
@DanKud
Во-первых типа события Focus не существует, нужно писать focus с маленькой буквы. Во-вторых вторым параметром нужно не вызывать функцию, а передавать ссылку на нее:
var input2 = document.getElementById("input2");
input2.addEventListener("focus", focusInput2);
function focusInput2() {
    alert("Focus2");
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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