我正在验证文本框,使它们只能包含字母,数字和这些特殊字符:`, - 。 '〜
我正在使用Jquery'key-down'事件。如果用户输入了无效字符,我会阻止它显示在文本框中。 为了启用波形符,并禁用其他特殊字符,我应该检测是否按住shift键。我为此使用了一个布尔变量。
问题是它允许输入其他特殊字符,例如!,$,它不会进入isShiftPressed == true
中的ValidateKeyDown
条件。我在其中放了一个警报,但没有执行。
所以这是我的代码:
$.fn.ValidateKeyDown = function () {
return this.each(function () {
$(this).keydown(function (e) {
if (e.shiftKey) {
isShiftPressed = true;
return;
}
else if (isShiftPressed == false) {
var n = e.keyCode;
if (!((n == 8) // backspace
|| (n == 9) // Tab
|| (n == 46) // delete
|| (n >= 35 && n <= 40) // arrow keys/home/end
|| (n >= 65 && n <= 90) // alphabets
|| (n >= 48 && n <= 57) // numbers on keyboard
|| (n >= 96 && n <= 105) // number on keypad
|| (n == 109) //(- on Num keys)
|| (n == 189) || (n == 190) || (n == 222) || (n == 192) //hypen,period,apostrophe,backtick
)
) {
e.preventDefault(); // Prevent character input
return false;
}
}
else if (isShiftPressed == true) {
var n = e.keyCode;
if (n != 192) {
e.preventDefault(); // Prevent character input
return false;
}
}
return true;
});
});
};
$.fn.ValidateKeyUp = function () {
return this.each(function () {
$(this).keyup(function (e) {
if (e.shiftKey) {
isShiftPressed = false;
}
});
});
};
答案 0 :(得分:1)
e.shiftKey本身会告诉您是否按下了shift,因此您可以直接使用它。您不需要单独的变量来跟踪它。
$.fn.ValidateKeyDown = function () { return this.each(function () { if (!e.shiftKey) { ... } else { ... } }
答案 1 :(得分:1)
我注意到e.shiftKey只在key up上返回true,因此isShiftPressed总是为false。试试这个
$.fn.ValidateInput = function () {
return this.each(function () {
$(this).keydown(function (e) {
var n = e.keyCode;
if (n == 16) {
isShiftPressed = true;
return;
}
if (!isShiftPressed) {
if (!((n == 8) // backspace
|| (n == 9) // Tab
|| (n == 46) // delete
|| (n >= 35 && n <= 40) // arrow keys/home/end
|| (n >= 65 && n <= 90) // alphabets
|| (n >= 48 && n <= 57) // numbers on keyboard
|| (n >= 96 && n <= 105) // number on keypad
|| (n == 109) //(- on Num keys)
|| (n == 189) || (n == 190) || (n == 222) || (n == 192) //hypen,period,apostrophe,backtick
)) {
e.preventDefault(); // Prevent character input
return false;
}
}
else if (isShiftPressed) {
if (n != 192) {
e.preventDefault(); // Prevent character input
return false;
}
}
return true;
})
.keyup(function (e) {
if (e.keyCode == 16) {
isShiftPressed = false;
}
});
});
};
注意:我还将ValidateKeyup和ValidateKeydown结合起来,但这不重要。