试图阻止用户输入非数字或超出特定范围的数字

Trying to prevent user from entering a non-number or a number above a certain range

本文关键字:数字 范围 用户 输入      更新时间:2023-09-26

这是我到目前为止所拥有的内容,但问题是如果我输入数字16,它将不再允许我更改文本框中的内容。正在寻求如何解决这个问题的帮助,谢谢大家。

 <SCRIPT language=Javascript>
  <!--
  function isNumberKey(evt)
  {
     var charCode = (evt.which) ? evt.which : event.keyCode
     if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
      var num = document.getElementById('quantity').value
         var y  = parseInt( num  ,  10  ) 
         if ( y > 15 )
         return false;
         return true;
     }
 </SCRIPT>

<form action="RegServlet" method="post">
    <p>
        Enter quantity you would like to purchase  :  <input name="quantity" onkeypress="return isNumberKey(event)" id ="quantity" size=15 type="text" value="1"/>
    </p>
</form>

这是一个可能的解决方案,我已经删除了您的内联事件处理程序,转而将其分配给addEventListener

我也从使用keypress事件更改为使用keyup

我用正则表达式去除了任何非数字字符,而不是检查按下了什么。

我们对输入元素的value进行parseInt,如果这个数字大于指定值,我们就截取最后一个输入的字符。

HTML

<p>Enter quantity you would like to purchase :
    <input name="quantity" id="quantity" size=15 type="text" value="1" />
</p>

Javascript

var quantity = document.getElementById("quantity");
function verify(evt) {
    var target = evt.target;
    target.value = target.value.replace(/[^'d]/, "");
    if (parseInt(target.value, 10) > 15) {
        target.value = target.value.slice(0, target.value.length - 1);
    }
}
quantity.addEventListener("keyup", verify, false);

关于jsfiddle

将整个事件封装在window.onload事件中。

票据

加载事件在文档加载过程结束时触发。在此时,文档中的所有对象都在DOM中,并且图像和子帧已经完成加载。

window.addEventListener("load", function () {
    document.getElementById("quantity").addEventListener("keyup", function (evt) {
        var target = evt.target;
        target.value = target.value.replace(/[^'d]/, "");
        if (parseInt(target.value, 10) > 15) {
            target.value = target.value.slice(0, target.value.length - 1);
        }
    }, false);
});

在jsfiddle 上