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);
};
  • Вопрос задан
  • 346 просмотров
Пригласить эксперта
Ответы на вопрос 1
@deadem
Дело в том, что после клика на кнопке на ней остаётся фокус. А на выключенной кнопке не срабатывает событие keydown, вот оно и не всплывает, так как его просто нет. Чтобы заработало, нужно после выключения кнопки передвинуть фокус на body.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы