jQuery $ (document) .keydown () выдает - PullRequest
       0

jQuery $ (document) .keydown () выдает

5 голосов
/ 16 сентября 2011

В настоящее время я работаю над веб-приложением, для которого требуется стандартная строка меню настольного приложения.Я начал работать над строкой меню и отсортировал макет.

К сожалению, клиент хочет, чтобы клавиши доступа (такие как Alt + F) загружали меню «Файл».Когда клавиша Alt нажата, я хочу показать клавиши доступа.В настоящее время у меня есть следующий код jQuery для этого:

$(document).ready(function() {
    $(this).keydown(function(e) {
        if(e.keyCode == 18) { alt_shifter = true; $('.access_key').css({ textDecoration: 'underline' }); }
    });

    $(this).keyup(function(e) {
        if(e.keyCode == 18) { alt_shifter = false; $('.access_key').css({ textDecoration: 'none' }); }
    });
});

К сожалению, как вы увидите на jsFiddle, по какой-то причине в Google Chrome при нажатии Alt клавиши подчеркиваются, а затем нормализуютсяKeyUp.Однако повторное нажатие Alt ничего не делает до следующего нажатия.Это похоже на то, как если бы подчеркивание было выполнено и keyup было запущено, оно не регистрирует нажатие до тех пор, пока не будет нажата снова.

Вот демонстрационная версия jsFiddle> http://jsfiddle.net/Ht2wD/

Anyпомощь будет принята с благодарностью!

Ответы [ 3 ]

5 голосов
/ 16 сентября 2011

Я изменил код для включения e.preventDefault (); прямо перед проверкой keyCode, и, похоже, он работает. Вот сайт, который помог мне прийти к этому ответу http://unixpapa.com/js/key.html

4 голосов
/ 16 сентября 2011

попробуйте с этим: http://jsfiddle.net/Ht2wD/14/

используя e.preventDefault(); работа для меня.

2 голосов
/ 16 сентября 2011

Вот ваша обновленная скрипка: http://jsfiddle.net/Ht2wD/13/

Эта прекрасная проблема исправлена ​​добавлением e.preventDefault().Если бы мне пришлось угадывать, это потому, что клавиша ALT также захватывается самим браузером и отображает свое выделенное меню.

$(document).ready(function() {
    $(this).keydown(function(e) {
        e.preventDefault();
        if(e.keyCode == 18) { alt_shifter = true; $('.access_key').css({ textDecoration: 'underline' }); }
    });

    $(this).keyup(function(e) {
        e.preventDefault();
        if(e.keyCode == 18) { alt_shifter = false; $('.access_key').css({ textDecoration: 'none' }); }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...