JQuery验证代码不允许删除输入的文本

时间:2012-05-30 15:59:41

标签: javascript jquery validation

我从这个问题中借了一些代码(见回复4):

how do i block or restrict special characters from input fields with jquery?

然而,在使用代码时,看起来虽然它在您整齐排序时进行验证,但它不允许您编辑您输入的任何内容。

$('input').bind('keypress', function (event) {
var regex = new RegExp("^[a-zA-Z0-9]+$");
var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
if (!regex.test(key)) {
   event.preventDefault();
   return false;
}});

我有点困惑,我试图通过将按键更改为keyup来调整它,但这只会阻止验证工作。任何指针都会被慷慨地接受。

2 个答案:

答案 0 :(得分:1)

这似乎是浏览器特定的问题。在Firefox中,keypress包括退格键和箭头键等元键,而Chrome则不包括。如果你稍微调整你的逻辑以更喜欢哪个超过charCode(我认为最好支持它)你最终得到这个

$('input').bind('keypress', function(event) {
    var regex = new RegExp("^[a-zA-Z0-9]+$");
    var code = event.charCode === 0 ? event.which : event.charCode;
    var key = String.fromCharCode(code);
    if (!regex.test(key) && code !== 8) {
         // 8 is ascii code for backspace
         event.preventDefault();
         return false;
    }
});

这个小提琴还会向控制台写入键入时在事件中传递的键和代码。 http://jsfiddle.net/Q2MWS/5/

答案 1 :(得分:0)

我认为event.preventDefault()阻止编辑输入的字符,如果它们与正则表达式不匹配。检查event.which / event.charCode是否有其他值,如退格,空格,小数点键等