Я пишу некоторую логику в JavaScript с помощью jQuery, где я должен проверить входное содержание по шаблону REGEX исключая:
"^[a-zA-Z0-9_]*$" //Alpha-numeric and _
Логика почти сделана, у меня просто есть немного проблемы при фильтрации функциональной клавиши DEL, моя логика идет как это:
var FunctionsKey = new Array(8, 9, 13, 16, 35, 36, 37, 39, 46);
function keypressValidation(key) {
if (config.regexExp != null) {
if ($.inArray(key, FunctionsKey) != -1) {
return true;
}
else {
var keyChar = String.fromCharCode(key);
return RegexCheck(keyChar);
}
}
return true;
}
Если KeyCode является одним из тех, которые в массиве, я позволяю ему передать, если не я получаю символ и сравниваю его с REGEX. Проблема: в некоторых Браузерах DEL и'.' (знак периода) имеют тот же код клавиши 46.
Так существует ли лучшая логика для фильтрации функциональных клавиш, или я должен записать условие для того случая, возможно, удалив 46 из массива и попытаться преобразовать ее для обугливания и если позволен, она переходит к функции Regex если не позволенный это передать? Другой вопрос будет в некоторых браузерах существуют ли более общие Коды клавиши?
Править: Моя привычка предложенного решения работает, потому что она не имеет значения, которые включают нажатого пользователя (DEL или период), я всегда добираюсь (.) как CHAR, по крайней мере, на OPERA и FF = (.
110 - десятичный код клавиши, 46 - клавиша DEL.
Для развлечения: вставьте это, чтобы увидеть, во что вы попали! РЕДАКТИРОВАТЬ: добавлено целевое событие
/* handle special key press */
$(document).ready(function() {
function checkAKey(e) {
var shouldBubble = true;
switch (e.keyCode) {
// user pressed the Tab
case 9:
{
alert("Tab hit, no bubble");
shouldBubble = false;
break;
};
// user pressed the Enter
case 13:
{
alert("Enter");
break;
};
// user pressed the ESC
case 27:
{
alert("Escape");
break;
};
};
/* this propogates the jQuery event if true */
return shouldBubble;
};
$("*").keydown(function(e) {
return checkAKey(e);
});
});
ИЛИ
$(document).ready(function() {
/* handle special key press */
function checkFieldKey(e, me) {
var shouldBubble = true;
switch (e.keyCode) {
// user pressed the Enter
case 13:
{
$(me).blur();
$("#somewhereElse").focus();
shouldBubble = false;
break;
};
};
/* this propogates the jQuery event if true */
return shouldBubble;
};
/* user pressed special keys while in Selector */
$("#myField").keydown(function(e) {
return checkFieldKey(e, $(this));
});
});