Numpad没有在fromCharCode中给出数字

时间:2015-04-07 13:33:35

标签: javascript google-chrome angularjs-directive

我只想在输入字段中允许某些按键。

问题是String.fromCharCode中的小键盘值与真实字符不对应...

另外注意,我的chrome将逗号(String.fromCharCode(188))翻译成“¼” - 虽然它应该是“,”?

我这样做了:

Javascript指令:

angular.module('LTS').directive('allowed', function () {
    return {
        restrict: 'A',
        link: function (scope, element, attrs, modelCtrl) {
            var allowedLowerCaseLetters = attrs.allowed.toLowerCase();
            element.on('keydown', function (event) {
                var pressedChar = String.fromCharCode(event.keyCode).toLowerCase();
                if (event.keyCode === 188) {
                    pressedChar = ",";
                }
                if (allowedLowerCaseLetters.indexOf(pressedChar) > -1 || event.keyCode === 8 || event.keyCode === 37 || event.keyCode === 39) {
//                    console.log(pressedChar+" should be added to model.");
                } else {
                    //TODO maybe add a notification ?
                    event.preventDefault();
                }
            });
        }
    };
});

HTML:

<input id="invoiceAmount" class="form-control importInput" type="text" ng-model="import.invoiceAmount"  allowed="1234567890,">

当心 Firefox在“event.charCode”中使用了代码而不是keypress上的keyCode

1 个答案:

答案 0 :(得分:3)

String.fromCharCodeevent.keyCode不同。

String.fromCharCode期望Unicode代码作为参数,然后返回与它们关联的字符。

event.keyCode 在keydown事件中实现有点混乱,它们返回被按下的键的代码而不是打印的字符的代码。但是,在按键事件中使用它将返回预期值以及要在String.fromCharCode中使用的正确值。

&#13;
&#13;
 function f(e){
  document.querySelector('div').innerHTML += e.type + ' - ' + e.keyCode + ' - ' + String.fromCharCode(e.keyCode) + '<br/>';
  }

document.querySelector('input').addEventListener('keydown', f);
document.querySelector('input').addEventListener('keypress', f);
&#13;
<input />
<div></div>
&#13;
&#13;
&#13;