我只想在输入字段中允许某些按键。
问题是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
答案 0 :(得分:3)
String.fromCharCode
和event.keyCode
不同。
String.fromCharCode
期望Unicode代码作为参数,然后返回与它们关联的字符。
event.keyCode
在keydown事件中实现有点混乱,它们返回被按下的键的代码而不是打印的字符的代码。但是,在按键事件中使用它将返回预期值以及要在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);
&#13;
<input />
<div></div>
&#13;