Проблема при прослушивании события focus
Возникла проблема при прослушивании события focus. Есть 3 инпута и 2 кнопки, при выделении первого (любого из них) кнопки должны скрываться, что собственно и происходит, при переходе с первого на следующий инпут кнопки должны так же оставаться скрытыми, чего не происходит и кнопки появляются, т.е. срабатывает прослушивание события focusOut, вот тут у меня затуп, не понимаю, по идее, я ведь перехожу на следующий инпут, а это снова событие focus, соответственно оно должно перекрывать focusOut.
var buttons = document.querySelectorAll('.button');
var inputs = document.querySelectorAll('.form__input');
inputs.forEach(function(input){
input.addEventListener('focus', function() {
buttons.forEach(function(button){
button.hidden = true;
});
});
input.addEventListener('focusout', function() {
setTimeout(function() {
buttons.forEach(function(button){
button.hidden = false;
});
}, 200);
});
});
Ответы (1 шт):
Вы правы, событие focusOut срабатывает раньше следующего focus, но у вас обработчик focusOut вызывает таймаут, которые отработает уже после нового focus, то есть схема примерно такая
> focus на инпуте
> скрыли кнопки
> focusOut на инпуте
> поставили таймаут на показ кнопок
> focus на следующем инпуте
> скрыли кнопки
> вызвался таймаут который мы поставили
Уберите таймаут, либо добавьте условие в него, что если есть фокус в инпуте, то не показываем кнопки