Я не думаю, что вам нужна часть protectDefault. Если вы хотите поймать ключи (event.keyCode
, или комбинации, например, event.ctrlKey
+ event.keyCode
), вы проверяете, разрешен ли keyCode
Если это так, просто верните true
, в противном случае верните false
. Если вы вернете false
, ввод с клавиатуры не будет записан в поле ввода, в противном случае он будет.
Я не могу придумать лучших способов использования keyCode. Вы можете использовать String.fromCharCode([keyCode])
, если хотите проверить наличие определенных значений символов, но он продолжает сводиться к некоторому циклу для проверки кодов клавиш, которые вы хотите проверить. Может быть switch ... case
может предложить немного больше читабельности.
Вот фрагмент кода из обработчика событий keydown, который я использую (просто для демонстрации, он на самом деле ничего не делает):
function handleKey(e, thisFld) {
thisFld = (thisFld || this);
e = e || event;
if (!e) {
return true;
}
var isCtrl = e.ctrlKey,
isShift = e.shiftKey,
isAlt = e.altKey,
kc = e.keyCode || e.which,
codes = [27, 38, 40],
keys = {
escape: 27,
up: 38,
down: 40,
ins: 45,
del: 46,
one: 49
};
if (isCtrl && kc === keys.del) { ... }
if (isAlt && kc === keys.ins) { ... }
//etc
return true;
}