0

我从这个问题中借用了一些代码(见回复 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 来调整它,但这只会阻止验证工作。任何指针都会被亲切地接受。

4

2 回答 2

1

这似乎是特定于浏览器的问题。在 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/

于 2012-05-30T16:25:57.600 回答
0

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

于 2012-05-30T16:07:57.937 回答