【问题标题】:HTML min and max not working for number attributeHTML 最小值和最大值不适用于数字属性
【发布时间】:2013-07-24 23:41:38
【问题描述】:

我有一个 html 表单,其中包括两个需要在特定范围内取数字的数字字段。我正在尝试使用 min 和 max 属性来完成此操作

<input type="number" id="AutoApprovalDelayInSeconds" min="0" max="2592000" step="1" placeholder="Range: 0 to 2592000"/>
<input type="number" id="AssignmentDurationInSeconds" min="30" max="31536000" step="1" placeholder="Range: 30 to 31536000" required/>

但是当我输入无效输入的表单时,它提交时没有错误显示或警告。我知道 number 属性只是数字的字符串表示,而不是整数或其他数字数据类型,所以我必须以某种方式使用 javascript 转换此输入,还是我做错了其他事情?谢谢!

编辑。我最初尝试在 Firefox 中打开它,但我现在知道它不支持此功能。

【问题讨论】:

标签: javascript html


【解决方案1】:

请记住 HTML5 input[type='number'] is not supported by many browsers,实际上只是 Chrome 和 IE10(注意:不是 Firefox)。

使用 Chrome 时我被限制发布表单,但在许多其他浏览器上你不会。如果您真的需要通过数字限制用户输入,并且想要进行一些验证,那么我建议您使用 JavaScript(可能是 jQuery Validate)。

【讨论】:

  • 别担心,我们实际上可以在 2023 年左右开始使用这些东西..
  • 不,我们不会 - 当商界的每个人都还在使用 IE9 时(我的意思是 10 年后,如果现在是这样的话,上帝我会喜欢的)
【解决方案2】:

假设表单名称为form,这是一个准系统脚本。您应该考虑将输入类型更改为文本,这样您就不必担心跨浏览器兼容性

<form id="form">
 <input type="text" id="AutoApprovalDelayInSeconds" step="1" placeholder="Range: 0 to 2592000">
 <input type="text" id="AssignmentDurationInSeconds" step="1" placeholder="Range: 30 to 31536000" required>
</form>

JS

 var delay, duration, form;
     delay = document.getElementById('AutoApprovalDelayInSeconds');
     duration = document.getElementById('AssignmentDurationInSeconds');
     form = document.getElementById('form');


 form.onsubmit = function (e) {
   e.preventDefault();
   delay = parseFloat(delay.value);
   duration = parseFloat(duration.value);
   if(delay < 0 || delay > 2592000 || isNaN(delay)) {
     delay.focus();
     alert('AutoApprovalDelayInSeconds is invalid');
     return;
   }
   if(duration < 30 || duration > 31536000 || isNaN(duration)) {
     duration.focus();
     alert('AssignmentDurationInSeconds is invalid');
     return;
   }
   // all input appears to be valid so send it
   form.submit(); 
 };

【讨论】:

  • 您不必更改输入类型;您仍然可以使用type=number,从而在支持的浏览器中进行检查,即使它们禁用了JavaScript,并且该元素被不支持的浏览器视为具有type=text。重要的是要在不支持type=number 的浏览器中进行一些检查,您需要使用 JavaScript。
  • @JukkaK.Korpela 。在 html 和 javascript 中进行双重检查,这是理想的。我这样做是因为如果它在支持它的浏览器上工作,他没有区分。但是,如果 javascript 被禁用,他无论如何都会回到原点,对吗?发送无效的表单输入
猜你喜欢
  • 1970-01-01
  • 2013-07-26
  • 2016-07-24
  • 2021-07-18
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多