Предотвратить событие по умолчанию для jQuery keydown в Firefox

У меня есть код jQuery, который создает массив фокусируемых элементов и связывает. клавишу со стрелками влево и вправо для перехода между ними. В Chrome, IE и Safari, начиная с preventDefault () или заканчивая return false (что технически я не хочу использовать, потому что мне не нужно stopPropagation () ) предотвращает событие стрелок по умолчанию, но в Firefox этого не происходит.

Как я могу предотвратить действие по умолчанию в Firefox?

Вот код, который работает должным образом, за исключением Firefox, где событие по умолчанию запускается в дополнение к моему обратному вызову.

$(function () {
    var focusables = $(":focusable");
    focusables.eq(0).focus();
    focusables.eq(0).select();
    focusables.each(function () {
        $(this).keydown(function (e) {
            if (e.which == '37') { // left-arrow
                e.preventDefault();
                var current = focusables.index(this),
                    next = focusables.eq(current - 1).length ? focusables.eq(current - 1) : focusables.eq(0);
                next.focus();
                next.select();
            }
            if (e.which == '39') { // right-arrow
                e.preventDefault();
                var current = focusables.index(this),
                    next = focusables.eq(current + 1).length ? focusables.eq(current + 1) : focusables.eq(0);
                next.focus();
                next.select();
            }
        });
    });
});
5
задан marc_s 19 February 2017 в 22:03
поделиться