我知道在keypress eventlistener
的元素中使用input
进行击键是纯粹的疯狂。但我个人想亲自了解在这种情况下我做错了什么。
代码的目标 - 只允许在字段input
中显示数字,禁止出现字母,以及使用键盘组合(alt,转移等)。
function onDown(e) {
e = e || event;
if (e.ctrlKey || e.altKey || e.metaKey) return; // false for key cominations
var chr = getChar(e);
if (chr == null) return;
if (chr < '0' || chr > '9') { // if "chr" do not a digit - false
return false;
}
}
function getChar(event) { // support func to get the char from keyCode
if (event.which == null) {
if (event.keyCode < 32) return null;
return String.fromCharCode(event.keyCode)
}
if (event.which != 0 && event.charCode != 0) {
if (event.which < 32) return null;
return String.fromCharCode(event.which);
}
return null;
}
inp.addEventListener( 'keypress', onDown );
<input type="text" id="inp">
答案 0 :(得分:2)
当输入的值不是数字时,您需要致电e.preventDefault();
。
function onDown(e) {
e = e || event;
if (e.ctrlKey || e.altKey || e.metaKey) return; // false for key cominations
var chr = getChar(e);
if (chr == null) return;
if (chr < '0' || chr > '9') { // if "chr" do not a digit - false
e.preventDefault();
}
}
function getChar(event) { // support func to get the char from keyCode
if (event.which == null) {
if (event.keyCode < 32) return null;
return String.fromCharCode(event.keyCode)
}
if (event.which != 0 && event.charCode != 0) {
if (event.which < 32) return null;
return String.fromCharCode(event.which);
}
return null;
}
inp.addEventListener('keypress', onDown);
<input type="text" id="inp">
答案 1 :(得分:1)
您不需要getChar
方法,因为该事件已有key
属性。
function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
function onDown(e) {
e = e || event;
if (e.ctrlKey || e.altKey || e.metaKey || e.shift) return; // false for key cominations
if(!isNumeric(e.key)) e.preventDefault();
}
inp.addEventListener( 'keypress', onDown );
&#13;
<input type="text" id="inp">
&#13;