我只允许用户输入字母。但是按钮HomeEndBackspaceDeleteArrow keys应该在文本框中起作用。

我已经编写了以下jQuery代码来实现此目的。

正则表达式^[a-zA-Z]*$在Chrome中工作正常,但在Mozilla FireFox中无法正常工作



$('#Firstname').bind('keypress', function (e) {
 var regex = new RegExp("^[a-zA-Z]*$");
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
    if (regex.test(str)) {
        return true;
    }
    return false;
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="Firstname" type="text"/>





谢谢

最佳答案

简要

根据Mozilla的文档,KeyboardEvent.charCodeKeyboardEvent.which均已弃用(charCode也被视为非标准)。

字符代码

KeyboardEvent.charCode的文档包含以下消息

jquery - 名称的跨浏览器jQuery正则表达式-LMLPHP
jquery - 名称的跨浏览器jQuery正则表达式-LMLPHP
jquery - 名称的跨浏览器jQuery正则表达式-LMLPHP

哪一个

KeyboardEvent.which的文档包含以下消息

jquery - 名称的跨浏览器jQuery正则表达式-LMLPHP







$('#Firstname').bind('keypress', function (e) {
 var regex = new RegExp("^[a-zA-Z]*$");
    if (regex.test(e.key)) {
        return true;
    }
    return false;
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="Firstname" type="text"/>







兼容性

我在以下浏览器中测试了答案;每个工作:


Chrome:63.0.3239.84(以及用于OSX的Chrome-感谢@TimBiegeleisen
Firefox:58.0b11
边缘:41.16299.15.0
Internet Explorer:11.125.16299.0
Safari(感谢@TimBiegeleisen


另外,请参见Mozilla的KeyboardEvent.key browser compatibility文档

09-27 17:43