Как я могу определить, есть ли в браузере поддержка нажатия клавиш для клавиш со стрелками?

Я работаю над веб-игрой (http://szarada.net/wyscigi/) для решения кроссвордов (польский язык). Одна из функций, которые я планирую представить, — это поддержка перемещения курсора на диаграмме кроссворда с помощью клавиш со стрелками. Чтобы обеспечить еще больший пользовательский опыт, я хотел бы поддерживать событие нажатия клавиши (не нажатие клавиши или клавишу вверх) для клавиш со стрелками, где это возможно (чтобы пользователь мог перемещать курсор по нескольким полям с помощью долгого нажатия клавиши).

Изучив несколько интернет-ресурсов (включая несколько записей StackOverflow), я смог понять, что только некоторые браузеры поддерживают нажатие клавиши для клавиш со стрелками.

Вот мой вопрос: как определить, поддерживает ли браузер функцию запуска события нажатия клавиши для клавиши со стрелкой? Я думал просто об обнаружении браузера (плюс версия браузера), но решение на основе функций, очевидно, было бы более масштабируемым. Я не нашел ничего полезного, например. Модернизр.

Я использую jQuery, так что советы на основе jQuery будут для меня наиболее полезными.


person Marcin Gajda    schedule 19.12.2013    source источник
comment
Поэкспериментируйте здесь в нескольких браузерах. действительно хотите посмотреть только на нажатие клавиши, тогда вам придется использовать клавиши NumPad (и, следовательно, другие цифровые клавиши также будут иметь тот же результат)   -  person Paul S.    schedule 19.12.2013
comment
возможный дубликат обработка ключей JavaScript и совместимость с браузером   -  person Liam    schedule 19.12.2013


Ответы (2)


На самом деле, keyDown — это событие, которое вы ищете. Он запускается повторно, если пользователь продолжает нажимать клавишу.

Итак, не используйте KeyPress, вместо этого используйте KeyDown, и все будет в порядке во всех браузерах.

person pryma    schedule 19.12.2013
comment
Спасибо, Прима! Я изменил свой код и прослушал событие нажатия клавиши. Все отлично работает под Chrome, FF, IE, Opera. Однако я не получил ответа на свой вопрос - есть ли какой-либо способ определить, поддерживает ли событие нажатия клавиши клавиши со стрелками, отличный от простого запроса о типе/версии браузера и заключения поддержки на основе этого. - person Marcin Gajda; 20.12.2013

Я знаю, что это с 2013 года, но мне пришлось сделать собственное обнаружение нажатия клавиш, потому что это мне не помогло. Вот решение, которое я использовал, чтобы обойти Chrome Android, не поддерживающий нажатие клавиш:

    $(function () {
        "use strict";
        var keypressDetected = false;

        $('body').on('keypress', function(event) {

               keypressDetected = true;
               alert('key press supported!');

        });

        var e = jQuery.Event("keypress");

        e.which = 50; // The key code that you wish to test for

        $("body").trigger(e);

        if (!keypressDetected) {

           // ... do magic here
        }
    });
person Alpha G33k    schedule 02.07.2015