Проблема при прослушивании события 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 шт):

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

Вы правы, событие focusOut срабатывает раньше следующего focus, но у вас обработчик focusOut вызывает таймаут, которые отработает уже после нового focus, то есть схема примерно такая

> focus на инпуте
> скрыли кнопки
> focusOut на инпуте
> поставили таймаут на показ кнопок
> focus на следующем инпуте
> скрыли кнопки
> вызвался таймаут который мы поставили

Уберите таймаут, либо добавьте условие в него, что если есть фокус в инпуте, то не показываем кнопки

→ Ссылка