如何限制HTML5"数字"元素中的可能输入?

Pra*_*sad 330 html html5 numbers input max

对于<input type="number">元素,maxlength不起作用.如何限制该maxlength数字元素?

Cyc*_*ode 314

您可以添加一个max属性,该属性将指定您可以插入的最高编号

<input type="number" max="999" />
Run Code Online (Sandbox Code Playgroud)

如果同时添加a maxmin值,则可以指定允许值的范围:

<input type="number" min="1" max="999" />
Run Code Online (Sandbox Code Playgroud)

以上仍然不会阻止用户手动输入超出指定范围的值.相反,他将显示一个弹出窗口,告诉他在提交表单后输入此范围内的值,如此屏幕截图所示:

在此输入图像描述

  • 这是正确的,但应该注意,Andy说这不会限制一个人输入更长的数字.所以它并不等同于文本字段中的maxlength. (76认同)
  • 我不知道为什么当它根本不起作用时这是如此受欢迎和接受!它只影响"微调器"控件,并且不会阻止用户键入长号. (34认同)
  • 如果你只是输入一个更高精度的浮点数,这将会破坏.例如3.1415926绕过它,因为它小于999且大于1. (8认同)
  • @Prasad - 如果安迪的答案是正确的,选择它,而不是最多的投票. (5认同)
  • 克里斯特,这个工作.同样@Andy说我已经使用oninput来分割额外的数字.参考http://mathiasbynens.be/notes/oninput (4认同)
  • DA:当然可以,但你可以使用`min =" - 999"max ="999"`伪造`maxlength ="3"`. (2认同)
  • @Codemonkey - 即使用户能够手动输入大于“max”或小于“min”的值,也不会提交表单。相反,您会看到一个弹出窗口,告诉您输入指定范围内的值。 (2认同)
  • 与JS maxlength模拟器相比,这几乎不是一个很好的用户体验 (2认同)
  • @nnnnnn - 这个问题没有用 ajax 或 js 标记吗? (2认同)
  • 在 Angular 13 上,如果将 min 指定为 0,max 指定为 10,用户仍然可以输入 11 并且表单正常提交。它根本不起作用。 (2认同)

And*_*y E 104

您可以指定minmax属性,这将允许仅在特定范围内输入.

<!-- equivalent to maxlength=4 -->
<input type="number" min="-9999" max="9999">
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于微调器控制按钮.虽然用户可能能够键入大于允许的数字max,但表单不会提交.

Chrome的验证邮件数量大于最大值
截图取自Chrome 15

可以oninput在JavaScript中使用HTML5 事件来限制字符数:

myInput.oninput = function () {
    if (this.value.length > 4) {
        this.value = this.value.slice(0,4); 
    }
}
Run Code Online (Sandbox Code Playgroud)

  • JavaScript方法可能存在的一个问题:如果插入点不在值的末尾,它可能无法按预期工作.例如,如果在输入字段中输入值"1234",则将插入点移回值的开头并键入"5",最后得到值"5123".这与maxlength为4的input type ="text"字段不同,浏览器不允许您在"full"字段中键入第5个字符,并且值将保持为"1234". (11认同)
  • @Pacerier:在我的回答中做了些什么意味着我不这么认为?正如您所看到的,我提供了可以使用HTML实现的最接近的解决方案,以及使用JavaScript的其他建议,其中OP可能希望阻止用户键入多于允许的字符. (4认同)

Dua*_*ane 79

如果您正在寻找一种移动Web解决方案,您希望用户在其中查看数字键盘而不是全文键盘.使用type ="tel".它将与maxlength一起使用,这将使您免于创建额外的JavaScript.

Max和Min仍然允许用户输入超过max和min的数字,这不是最佳的.

  • 我发现这不是数字输入的最佳解决方案,因为"tel"输入允许附加符号,并且在每个数字旁边显示字母.纯数字键盘看起来更干净. (8认同)
  • 伟大的发现,这就像一个魅力,竖起大拇指没有创建额外的JavaScript. (2认同)
  • 如果与pattern="[0-9]*"一起使用,额外的符号将被禁用 (2认同)
  • 这是对用户友好的数字输入模式的最佳总结之一:https://css-tricks.com/finger-friend-numerical-inputs-with-inputmode/ 为了节省您的点击次数,此 HTML 涵盖了很多内容,并且支持很多浏览器: ```&lt;input type="number" inputMode="numeric" pattern="[0-9]*" min="1" max="2112"&gt;``` 然后你可以增强如果需要的话,可以使用一些 JavaScript (2认同)

Dav*_*oua 68

你可以将所有这些结合起来:

<input name="myinput_drs"
oninput="maxLengthCheck(this)"
type = "number"
maxlength = "3"
min = "1"
max = "999" />

<script>
  // This is an old version, for a more recent version look at
  // https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/
  function maxLengthCheck(object)
  {
    if (object.value.length > object.maxLength)
      object.value = object.value.slice(0, object.maxLength)
  }
</script>
Run Code Online (Sandbox Code Playgroud)


更新:
您可能还希望阻止输入任何非数字字符,因为object.length数字输入的字符串为空,因此其长度为0.因此该maxLengthCheck功能不起作用.

解决方案:
请参阅示例.

演示 - 请在此处查看完整版代码:http:
//jsfiddle.net/DRSDavidSoft/zb4ft1qq/1/

更新2:这是更新代码:https: //jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/

更新3: 请注意,允许输入超过一个小数点可能会弄乱数字值.

  • 是的,我知道,但初学者可能仍然只是复制粘贴它。 (2认同)

May*_*ura 25

这很简单,你可以用一些javascript模拟一个maxlength,看一下:

//maxlength="2"
<input type="number" onKeyDown="if(this.value.length==2) return false;" />
Run Code Online (Sandbox Code Playgroud)

  • 使用您的解决方案,一旦达到2个字符,就无法使用退格键.但我想念一个功能性解决方案 (11认同)
  • 而不是onKeyDown你应该使用onKeyPress. (10认同)
  • `keydown`的问题是你不能在最大字符处使用退格键.`keypress`的问题是你可以复制+粘贴超过最大字符. (2认同)

小智 20

或者,如果您的最大值是例如99且最小值为0,则可以将其添加到输入元素(您的值将按最大值等重新计算)

<input type="number" min="0" max="99" 
   onKeyUp="if(this.value>99){this.value='99';}else if(this.value<0){this.value='0';}"
id="yourid">
Run Code Online (Sandbox Code Playgroud)

然后(如果你想),你可以检查是否输入真正的数字

  • 如果您仍要显示警告消息,请执行@xoxel (2认同)
  • 为了概括起见,我会做 `onKeyUp="if(this.value&gt;this.max)this.value=this.max;if(this.value&lt;this.min)this.value=this.min;" ` (2认同)

Хри*_*тов 16

您可以将其指定为文本,但添加pettern,仅匹配数字:

<input type="text" pattern="\d*" maxlength="2">
Run Code Online (Sandbox Code Playgroud)

它非常完美,并且在移动设备上(在iOS 8和Android上测试)弹出数字键盘.

  • 不会阻止用户以此输入非数字字符。他们可以输入2个字符。'pattern'只引起验证突出显示。 (2认同)

小智 15

假设您希望最大允许值为 1000 - 键入或使用微调器。

您可以使用以下方法限制微调器值: type="number" min="0" max="1000"

并使用 javascript 限制键盘输入的内容: onkeyup="if(parseInt(this.value)>1000){ this.value =1000; return false; }"

<input type="number" min="0" max="1000" onkeyup="if(parseInt(this.value)>1000){ this.value =1000; return false; }">
Run Code Online (Sandbox Code Playgroud)


Bha*_*rat 14

简单的解决方案将起作用,

  • 输入滚动事件

  • 通过键盘复制粘贴

  • 通过鼠标复制粘贴

  • 输入类型等情况

    <input id="maxLengthCheck" 
           name="maxLengthCheck" 
           type="number" 
           step="1" 
           min="0" 
           oninput="this.value = this.value > 5 ? 5 : Math.abs(this.value)" />
    
    Run Code Online (Sandbox Code Playgroud)

查看this.value > 5的条件,只需将 5 更新为您的最大限制。

解释

  • 如果我们的输入数字大于我们的限制,则用适当的数字Math.abs(this.value)更新输入值this.value

  • 否则只需达到最大限制,即 5。


Pra*_*nde 13

//For Angular I have attached following snippet.
Run Code Online (Sandbox Code Playgroud)
<div ng-app="">
  <form>
    Enter number: <input type="number" ng-model="number" onKeyPress="if(this.value.length==7) return false;" min="0">
  </form>
  <h1>You entered: {{number}}</h1>
</div>
Run Code Online (Sandbox Code Playgroud)

如果您使用"onkeypress"事件,那么在开发过程中您将不会受到任何用户限制(单元测试).如果您有要求不允许用户在特定限制后输入,请查看此代码并尝试一次.


Bra*_*ars 10

另一种选择是只为具有maxlength属性的任何内容添加一个侦听器,并将切片值添加到该值.假设用户不想在与输入相关的每个事件中使用函数.这是一段代码片段.忽略CSS和HTML代码,JavaScript才是最重要的.

// Reusable Function to Enforce MaxLength
function enforce_maxlength(event) {
  var t = event.target;
  if (t.hasAttribute('maxlength')) {
    t.value = t.value.slice(0, t.getAttribute('maxlength'));
  }
}

// Global Listener for anything with an maxlength attribute.
// I put the listener on the body, put it on whatever.
document.body.addEventListener('input', enforce_maxlength);
Run Code Online (Sandbox Code Playgroud)
label { margin: 10px; font-size: 16px; display: block }
input { margin: 0 10px 10px; padding: 5px; font-size: 24px; width: 100px }
span { margin: 0 10px 10px; display: block; font-size: 12px; color: #666 }
Run Code Online (Sandbox Code Playgroud)
<label for="test_input">Text Input</label>
<input id="test_input" type="text" maxlength="5"/>
<span>set to 5 maxlength</span>

<br>

<label for="test_input">Number Input</label>
<input id="test_input" type="number" min="0" max="99" maxlength="2"/>
<span>set to 2 maxlength, min 0 and max 99</span>
Run Code Online (Sandbox Code Playgroud)


thd*_*oan 8

正如其他人所说,min/max与maxlength不同,因为人们仍然可以输入一个大于你想要的最大字符串长度的浮点数.要真正模拟maxlength属性,您可以在压缩中执行类似的操作(这相当于maxlength ="16"):

<input type="number" oninput="if(value.length>16)value=value.slice(0,16)">
Run Code Online (Sandbox Code Playgroud)


Neh*_*ain 8

最大长度将无法使用<input type="number"我知道的最佳方式使用oninput事件来限制maxlength.请参阅以下代码以简单实现.

<input name="somename"
    oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);"
    type = "number"
    maxlength = "6"
 />
Run Code Online (Sandbox Code Playgroud)


小智 7

    <input type="number" maxlength="6" oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);">
Run Code Online (Sandbox Code Playgroud)

这对我来说没有问题


小智 6

Maycow Moura的回答是个好的开始.但是,他的解决方案意味着当您输入第二个数字时,所有字段的编辑都会停止.因此,您无法更改值或删除任何字符.

以下代码在2处停止,但允许继续编辑;

//MaxLength 2
onKeyDown="if(this.value.length==2) this.value = this.value.slice(0, - 1);"
Run Code Online (Sandbox Code Playgroud)

  • 不.尝试粘贴一个值. (2认同)

til*_*own 6

之前我遇到过这个问题,我使用html5数字类型和jQuery的组合解决了它.

<input maxlength="2" min="0" max="59" name="minutes" value="0" type="number"/>
Run Code Online (Sandbox Code Playgroud)

脚本:

$("input[name='minutes']").on('keyup keypress blur change', function(e) {
    //return false if not 0-9
    if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
       return false;
    }else{
        //limit length but allow backspace so that you can still delete the numbers.
        if( $(this).val().length >= parseInt($(this).attr('maxlength')) && (e.which != 8 && e.which != 0)){
            return false;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我不知道这些事件是否有点矫枉过正,但它解决了我的问题. 的jsfiddle


Hex*_*boY 6

为数字输入设置 maxlength 的一种简单方法是:

<input type="number" onkeypress="return this.value.length < 4;" oninput="if(this.value.length>=4) { this.value = this.value.slice(0,4); }" />
Run Code Online (Sandbox Code Playgroud)


Hec*_*tor 5

HTML 输入

 <input class="minutesInput" type="number" min="10" max="120" value="" />
Run Code Online (Sandbox Code Playgroud)

jQuery

 $(".minutesInput").on('keyup keypress blur change', function(e) {

    if($(this).val() > 120){
      $(this).val('120');
      return false;
    }

  });
Run Code Online (Sandbox Code Playgroud)


Mic*_*ole 5

啊。就好像有人在实施过程中半途而废,并认为没有人会注意到。

无论出于何种原因,上面的答案都没有使用minmax属性。这个 jQuery 完成了它:

    $('input[type="number"]').on('input change keyup paste', function () {
      if (this.min) this.value = Math.max(parseInt(this.min), parseInt(this.value) || 0);
      if (this.max) this.value = Math.min(parseInt(this.max), parseInt(this.value) || 0);
    });
Run Code Online (Sandbox Code Playgroud)

如果您是那些“jQuery-is-the-devil”类型之一,它可能也可以作为没有 jQuery 的命名函数“oninput”。