n-1
@n-1

Почему после отключения элемента button (внутри обработчика клика) перестает отлавливаться событие keydown на body пока не кликнешь по body?

Ситуация:
Есть кнопка. Обработчик клика по кнопке отключает кнопку.
Есть обработчик события keydown на body.

До клика по кнопке обработчик keydown корреткно отрабатывает. После клика по кнопке - перестает.
И начинает отрабатывать только после клика на body.

Такое поведение наблюдается в браузере Firefox. В Chrome всё работает корректно (или просто так, как я этого ожидаю ))

Отлов событий focus/blur/focusin/focusout на body ясности не вносит.
Прошу помочь разобраться.

Браузеры актуальной версии, OS Windows 10.

<body>
        <button>Button</button>
        <script src="http://code.jquery.com/jquery-3.2.1.min.js"></script>
        <script src="keydown.js"></script>
</body>


function clickHandler() {
        $('button').prop('disabled', true);
 }

function keydownHandler() {
        console.log('keydown');
}

function focusHandler() {
        console.log('focus');
}

function blurHandler() {
        console.log('blur');
}

function focusinHandler() {
        console.log('focusin');
}

function focusoutHandler() {
        console.log('focusout');
}

window.onload = function () {
        $('body').keydown(keydownHandler);

        $('body').focus(focusHandler);
        $('body').blur(blurHandler);

        $('body').focusin(focusinHandler);
        $('body').focusout(focusoutHandler);

        $('button').click(clickHandler);
};
  • Вопрос задан
  • 341 просмотр
Пригласить эксперта
Ответы на вопрос 1
@deadem
Дело в том, что после клика на кнопке на ней остаётся фокус. А на выключенной кнопке не срабатывает событие keydown, вот оно и не всплывает, так как его просто нет. Чтобы заработало, нужно после выключения кнопки передвинуть фокус на body.
Ответ написан
Ваш ответ на вопрос

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

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