【问题标题】:Don't let to write a number greater than max attribute in input不要让在输入中写入大于 max 属性的数字
【发布时间】:2021-10-22 09:41:02
【问题描述】:

document.querySelector("#maca").addEventListener("keydown", function(e) {
  if (e.target.value > this.getAttribute("max")) {
    e.preventDefault();
  }
})
<input type="text" name="maca" placeholder="maca" id="maca" max="7">

我试图阻止用户输入一个大于 max 属性值的数字。发生的情况是,首先允许用户写入更大的数字,然后不允许。

我该如何解决这个问题?

非常感谢!

【问题讨论】:

    标签: javascript html web


    【解决方案1】:

    这比看起来更棘手,因为即使<input type="number" max="7"/> 也允许您输入9 而不会抱怨(我相信它应该抱怨并阻止输入,但由于某种原因不会)。下面的例子

    <input type="number" max="7"/>

    我想出了这个小小的 JS 解决方案:

    const max = +maca.getAttribute("max");
    
    maca.addEventListener("keydown", function(e) {
      const typed = +e.key;
      
      if(!isNaN(typed)) e.preventDefault(); // Allow any non-number keys (backspace etc.)
      
      if ( +(e.target.value + typed) <= max) {
        maca.value += typed
      } else {
        console.log(`Number too big! Max is ${max}`)
      }
    })
    &lt;input type="number" name="maca" placeholder="maca" id="maca" max="7"&gt;

    这确实不允许用户输入89。此外,您可以输入 1,但您不能在输入 11 时添加另一个数字。

    【讨论】:

    • “我相信它应该抱怨并阻止输入,但由于某种原因不会”,它不会阻止输入,但它没有通过验证约束,因此您可以将自定义样式应用于该字段通知用户该值无效并让他们更正它。见developer.mozilla.org/en-US/docs/Web/HTML/Attributes/max
    • @JeremyThille:我做到了;)
    • 确实如此。换句话说,它非常松散,不会积极阻止任何超过最大值的值。主要是提供信息
    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多