我只想在我的输入栏中允许某些按键。

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

另外请注意,我的镶边将逗号(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”中有它的代码,而不是按键上的keyCode

最佳答案

String.fromCharCodeevent.keyCode不同。

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

按键事件的实现中的event.keyCode有点令人困惑,它们返回所按下键的代码,而不是所打印字符的代码。但是,在按键事件中使用它会返回期望值和String.fromCharCode中要使用的正确值。



 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);

<input />
<div></div>

10-04 16:41