我正在使用keypress event,并且想在按下键后在value框内获取input。我也想捕获按下了哪个键。在this example中,我只允许用户在input框中输入数字(我知道输入有number type)。我正在使用setTimeoutvalue框中获取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/

10-12 00:08
查看更多