jQuery / Javascript - Отклонить «управляющие» ключи для события keyDown - PullRequest
5 голосов
/ 14 октября 2011

Каков самый чистый способ в JavaScript или jQuery для фильтрации управляющих клавиш .Под управляющими клавишами я подразумеваю любую клавишу, которая НЕ является AZ, 0-9 или специальными символами (то есть!, @, # И т. Д.).Я просто хочу отфильтровать такие ключи, как «Shift», «Alt», «F1-F9», «Caps Lock» и т. Д.

Я уверен, что смогу проверить каждый отдельный код ASCII из аргумента события ...но мне интересно, есть ли "более чистое" решение.

Примечание: я разрабатываю приложение специально для IE 8

Ответы [ 3 ]

5 голосов
/ 04 января 2012

Я пошел с чем-то вроде этого:

function (e, inputElement) {
    // If the user gives the textbox any keyboard input, mark the input box as "dirty"
    var scope = this;
    var k = e.which;

    // Verify that the key entered is not a special key
    if (k == 20 /* Caps lock */
     || k == 16 /* Shift */
     || k == 9 /* Tab */
     || k == 27 /* Escape Key */
     || k == 17 /* Control Key */
     || k == 91 /* Windows Command Key */
     || k == 19 /* Pause Break */
     || k == 18 /* Alt Key */
     || k == 93 /* Right Click Point Key */
     || ( k >= 35 && k <= 40 ) /* Home, End, Arrow Keys */
     || k == 45 /* Insert Key */
     || ( k >= 33 && k <= 34 ) /*Page Down, Page Up */
     || (k >= 112 && k <= 123) /* F1 - F12 */
     || (k >= 144 && k <= 145 )) { /* Num Lock, Scroll Lock */
        return false;
    }
    else {
        scope.setPointValueDirtyStatus(inputElement, true);
    }
}
3 голосов
/ 14 октября 2011

Использовать event.which - Каждый ключ имеет свой собственный код. Управляющая клавиша - 17, клавиша Shift - 16, а @ - две разные клавиши, за 16 следует 50. Используйте демонстрационную программу на этой странице, чтобы узнать, какие значения возвращаются для каждой клавиши, которую вы хотите принять или проигнорировать.

1 голос
/ 14 октября 2011

Это разрешит только az (коды 65 - 90), 0-9 (48 - 57).Обратите внимание, что shift должно быть разрешено, поскольку оно необходимо для преобразования текста в верхний регистр.

$("...").keydown(function(ev){
    var k = ev.which;
    if(!(k >= 65 && k <= 90) /* a-z */
    || !(k >= 48 && k <= 57) /* numbers */
    || !(k >= 96 && k <= 111) /* numeric keyboard*/
    || k != 59 || k != 61 || k != 188 || k != 190 || k != 191 || k != 191
    || k != 192 || !(k >= 219 && k <= 222) || k != 32 /* Comma's,  etc. */
    || ev.ctrlKey || ev.altKey/* || ev.shiftKey*/){
        //Filter
    }
})
...