我正在使用keypress
event
,并且想在按下键后在value
框内获取input
。我也想捕获按下了哪个键。在this example中,我只允许用户在input
框中输入数字(我知道输入有number
type
)。我正在使用setTimeout
从value
框中获取input
。有没有更好的方法可以做到这一点?这会失败吗?
var elTest = document.getElementById('test');
var elResult = document.getElementById('result');
function isNumber(evt, el) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
evt.preventDefault();
return false;
}
setTimeout(function () {
elResult.textContent = el.value;
}, 0);
return true;
}
elTest.addEventListener('keypress', function(e) {
return isNumber(e, this);
});
<input id='test' />
<div id='result'>
</div>
最佳答案
由于keypress事件不会在退格键或Delete上触发,因此我会结合使用keydown和keyup事件侦听器。
按下键盘时,检查数字,退格/删除输入,并在需要时进行阻止。
键入时,从输入值更新结果输出。
var elTest = document.getElementById('test');
var elResult = document.getElementById('result');
function allowInput(evt) {
var charCode = (evt.which) ? evt.which : evt.keyCode;
var isNumber = charCode < 58 && charCode > 47;
var isBackspace = charCode == 8 || charCode == 46;
return isNumber || isBackspace;
}
elTest.addEventListener('keydown', function (e) {
if (!allowInput(e)) {
e.preventDefault();
return false;
}
return true;
});
elTest.addEventListener('keyup', function (e) {
elResult.textContent = this.value;
});
关于javascript - 通过按键获取输入值并按下捕获键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40141185/