javascript - Vanilla javascript 函数仅输入数字,如果不内联调用则不起作用

标签 javascript dom-events

我发现这个函数旨在阻止输入非数字字符:

function isNumber(evt) {
    evt = (evt) ? evt : window.event;
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57)) {
        return false;
    }
    return true;
}

如果我这样调用它:<input class="onlynumbers" type="text" onkeypress="return isNumber(this);" >它有效。

如果我写这样的内容:

var clickMe = document.querySelectorAll('.onlynumbers');
for (var i = 0; i < clickMe.length; i++) {
    clickMe[i].addEventListener('keypress', function (event) {

        isNumber(event);

    }, false);
}

事实并非如此。我仍然可以输入字母。我无法弄清楚原因。 你能帮我吗?提示:我无法使用 JQUERY。

最佳答案

正如 @VLAZ 所建议的,使用 type="number" 是更好的解决方案。

但是,要修复您的代码 - 如果字符不是数字,请使用 event.preventDefault() 阻止字母插入:

function isNumber(evt) {
  evt = (evt) ? evt : window.event;
  var charCode = (evt.which) ? evt.which : evt.keyCode;
  if (charCode > 31 && (charCode < 48 || charCode > 57)) {
    return false;
  }
  return true;
}

var clickMe = document.querySelectorAll('.onlynumbers');

for (var i = 0; i < clickMe.length; i++) {
  clickMe[i].addEventListener('keypress', function(event) {
    if(!isNumber(event)) event.preventDefault();
  }, false);
}
<input class="onlynumbers" type="text">

关于javascript - Vanilla javascript 函数仅输入数字,如果不内联调用则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58354192/

相关文章:

javascript - JavaScript 事件系统是否违反了 LSP?

javascript - 当链接位于另一个链接上方时,如何触发点击事件?

javascript - 如何使用 Javascript 函数构造函数在每个框上添加点击警报?

javascript - 异常非处理 : Ignoring exceptions without try catch

javascript - VS 2015 中有更好的代码高亮支持吗?

javascript - 如何在非 vue 网络应用程序中使用 Vuejs 网络组件作为输入元素?

javascript - .ejs 模板中的 Bootstrap 分页

javascript - 从 Iframe 调用 javascript 到 aspx 页面

javascript - 如何缩放 Canvas ?

javascript - JavaScript 中的图像更改器(mutator)