我只想在我的输入栏中允许某些按键。
问题是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.fromCharCode
和event.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>