HTML编号输入min和max无法正常工作

Tom*_*nal 40 html html5

我有type=number输入字段,我为它设置minmax值:

<input type="number" min="0" max="23" value="14">
Run Code Online (Sandbox Code Playgroud)

当我使用输入字段右侧的小箭头更改渲染UI中的时间时,一切正常 - 我不能超过23或低于0.但是,当我手动输入数字时(使用键盘),那么这两个限制都没有效果.

有没有办法阻止任何人输入他们想要的任何数字?

Vin*_*ent 19

尽管 HTML5 在 type=number 控件的向上/向下箭头上强制执行 min 和 max,但要真正使这些值有用,您仍然必须使用 Javascript

只需将此函数保存在某处并在输入时调用它即可。

function enforceMinMax(el) {
  if (el.value != "") {
    if (parseInt(el.value) < parseInt(el.min)) {
      el.value = el.min;
    }
    if (parseInt(el.value) > parseInt(el.max)) {
      el.value = el.max;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
<input type="number" min="0" max="23" value="14" onkeyup=enforceMinMax(this)>
Run Code Online (Sandbox Code Playgroud)

  • 虽然这在特定情况下可能很有用(比如这个),但随着值的变化,它对用户来说并不是很好。例如,如果您输入“111”,它将变成“23”,而理想情况下它应该保留在“11”。在其他情况下,正如 @horiatu 所评论的,如果最小值设置为“10”,它不会让您输入“15”。 (3认同)

小智 15

也许不使用"数字"类型,您可以使用"范围"类型,这将限制用户输入数字,因为它使用滑动条,如果您想配置它以显示当前数字只需使用JavaScript


M K*_*aei 13

<input type="number" min="0" onkeyup="if(value<0) value=0;" />
Run Code Online (Sandbox Code Playgroud)


Pra*_*man 12

使用HTML5 maxmin,您只能限制值以输入数字.但是你需要使用JavaScript或jQuery来做这种改变.我有一个想法是使用data-属性并保存旧值:

$(function () {
  $("input").keydown(function () {
    // Save old value.
    if (!$(this).val() || (parseInt($(this).val()) <= 11 && parseInt($(this).val()) >= 0))
    $(this).data("old", $(this).val());
  });
  $("input").keyup(function () {
    // Check correct, else revert back to old value.
    if (!$(this).val() || (parseInt($(this).val()) <= 11 && parseInt($(this).val()) >= 0))
      ;
    else
      $(this).val($(this).data("old"));
  });
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="number" min="0" max="23" value="14" />
Run Code Online (Sandbox Code Playgroud)

  • 我敢打赌,我仍然可以快速输入超出范围的数字并提交:) (4认同)
  • 这有很大的失败.例如,如果你需要输入`23`,它将不允许你,因为它需要每个`keydown`,因此认为你只输入'2`.你也可以按住一个键,即"5555555"因为没有"keyup"被捕获. (3认同)
  • 我知道这是一个旧帖子。但这仍然是公认的答案。目前,除了“11”之外,我无法在输入字段中输入_任何_合理的两位数字。 (2认同)

use*_*057 9

在某些情况下pattern可以用来代替minmax.它正常工作required.


Ant*_*ony 5

$(document).ready(function(){
    $('input[type="number"]').on('keyup',function(){
        v = parseInt($(this).val());
        min = parseInt($(this).attr('min'));
        max = parseInt($(this).attr('max'));

        /*if (v < min){
            $(this).val(min);
        } else */if (v > max){
            $(this).val(max);
        }
    })
})
Run Code Online (Sandbox Code Playgroud)

这是我的贡献。请注意, v < min 被注释掉了,因为我使用的是 Bootstrap,它善意地向用户指出范围在 1-100 之外,但奇怪的是没有突出显示 > max!


小智 5

oninput="if(this.value>your_max_number)this.value=your_max_number;"
Run Code Online (Sandbox Code Playgroud)

这对我来说很有效。