Почему из-за изменения стилей input в состоянии focus не отрабатывает addEventListener("submit")

В состоянии focus высота поля Message увеличивается. Если нажать кнопку send, пока message в фокусе - событие submit(click тоже) не отработает. При повторном(втором) нажатии - сработает. Такой эффект появляется, если при состоянии фокуса любому полю изменить высоту. И пропадает если убрать изменение высоты.

&_textarea:focus {
      height: 90px;
}

Как сделать так, чтобы кнопка работала при первом нажатии? Ссылка на код форма


Ответы (2 шт):

Автор решения: Marina

Чтобы поймать щелчок над кнопкой, при изменение высоты соседних элементов в фокусе, нужно использовать событие mousedown для кнопки. Событие mousedown срабатывает, когда кнопка указывающего устройства (к примеру, мыши) нажата над элементом.

Например:

const btn = document.getElementById("btn");
btn.addEventListener("mousedown", function (event) {
   alert("вы попытались нажать кнопку");
})
→ Ссылка
Автор решения: Grundy

В данном случае это действительно из-за ухода кнопки из под мышки.

  1. В момент нажатия кнопки мыши фокус уходит с инпута
  2. инпут меняет высоту
  3. кнопка сдвигается
  4. если курсор мыши не над кнопкой не происходит события mouseup и, как следствие click
  5. из-за этого не происходит отправка формы.

Для решения нужно либо зафиксировать высоту, чтобы при уходе фокуса высота не менялась

либо откладывать выполнение обработчика на какое-то время.

→ Ссылка