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

JQuery validation code will not allow deletion of entered text

本文关键字:输入 文本 删除 不允许 验证 代码 JQuery      更新时间:2023-09-26

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

如何使用 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 来调整它,但这只会阻止验证工作。任何指示都会被慷慨地接受。

这似乎是浏览器特定的问题。在Firefox中,按键包括元键,如退格键和箭头键,而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/

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