2

我用 jQuery 创建了一个用于输入掩码的函数:

$.fn.mask = function(regex) { 
    this.on("keydown keyup", function(e) {
        if (regex.test(String.fromCharCode(e.which))) {
            return false;
        }
    });
}

它根据您传递的正则表达式拒绝任何输入。例子:

$("#textfield").mask(/\s/); // denies white spaces
$("#textfield").mask(/\D/); // denies anything but numbers

上面的那些例子有效,但我正在尝试使用正则表达式来接受带小数点分隔符的数字,如下所示:

$("#textfield").mask(/[^\d.,]/); // Anything except digits, dot and comma

那是行不通的。String.fromCharCode(e.which)但是,如果我在按下时登录控制台,.或者,它向我显示这些(相应的)字符:¾¼.

问题是为什么String.fromCharCode(e.which)代表那些字符而不是按下的字符?

4

1 回答 1

3

You want to deal with actual characters produced from keyboard, not a layout position of a key.

$.fn.mask = function(regex) { 
    this.on("keypress", function(e) {
        if (regex.test(String.fromCharCode(e.which))) {
            return false;
        }
    });
}

The keypress event reports the code point of a character produced.

http://jsfiddle.net/USgNJ/

于 2013-08-14T17:54:19.480 回答