前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库rangeOverflow stepMismatch 校验错误报告
HTML表单与输入

数字输入不符合 min、max、step 时,浏览器会报什么错?

type="number" 的值低于 min 会触发 rangeUnderflow,高于 max 会触发 rangeOverflow,偏离 step 允许的刻度会触发 stepMismatch。浏览器会在约束校验时阻止无效表单提交。

前端进阶之旅 · 一题精讲更新于 2026.09.29
HTML#表单与输入#表单
先看核心答案读代码示例
理解线索

三个约束各有错误标志

  1. min定义允许的数值下限
  2. max定义允许的数值上限
  3. step定义从步进基准起可取的间隔

step 的基准通常优先取 min,不能只检查输入值是否是步长的整数倍。

核心回答

先记住这个答案

数字输入框会把不同的约束失败记录在 input.validity 上。低于 min 是 rangeUnderflow,高于 max 是 rangeOverflow,不落在 step 允许的序列上是 stepMismatch。提交时,浏览器先运行交互式约束校验;有无效控件就阻止提交,并对需要提示的控件显示浏览器消息。空值如果没有 required,通常不会因这些数值约束失败。

  • 低于 min 是 rangeUnderflow
  • 高于 max 是 rangeOverflow
  • 不合 step 是 stepMismatch
  • 空值是否报错取决于 required

步进是从基准开始数

假设价格从 1 元起,每次增加 2 元,合法值是 1、3、5,而不是所有偶数。step 的计算需要一个基准:通常先看 min,没有时再看值属性或默认基准。只写“能被 2 整除”会把这个例子判断反。

从 1 开始每次加 2HTML
<label>价格
  <input name="price" type="number" min="1" max="9" step="2" required>
</label>
<button type="submit">保存</button>

输入 2 时落在上下限内,却不符合步进,stepMismatch 为真;输入 11 则超过上限。代码里还设置了 required,所以留空时会出现 valueMissing。 浏览器原生提示文案会随语言和实现变化,不应在业务代码里硬匹配具体提示文字。需要分辨错误原因时,读取 validity 各布尔属性。

提交与主动检查

用户点击提交按钮或调用 requestSubmit() 时,会进行表单约束校验;无效控件使提交停止。代码也可以调用 checkValidity() 获取布尔结果,或用 reportValidity() 触发交互式提示。

input.validity.valid 表示约束整体是否通过。一个输入可能同时有多个约束属性,但设计错误提示时应给用户最可操作的修正建议,例如“请输入 1 到 9 之间、间隔为 2 的数字”。服务端仍须重新校验,因为前端约束可被绕过。

这几个错误标志可以同时为真,不是互斥的选项。在上面的 min="1" max="9" step="2" 示例里,输入 12 既高于上限,又偏离 1、3、5、7、9 这条步进序列,rangeOverflow 和 stepMismatch 都可能为真。若 UI 只展示一条提示,应先告诉用户最容易修正的问题,而不是把浏览器提示文本当作固定错误码解析。金额等需要精确小数的业务,服务端还要用明确的十进制规则重新验证。

回答前,多想一步

容易答错的地方

只看 rangeOverflow 就判断输入合法
范围内的值还可能不合 step,或者根本不是可解析数字。应看整体 valid,需要精确反馈再看各标志。
认为 step="2" 一定只收偶数
步进基准会影响允许序列。min="1" 时,步长 2 对应 1、3、5 等奇数。
试着用自己的话回答

面试官还会怎么问?

step="any" 会怎样?

它不再用步进间隔限制数值,但 min、max 和其他约束仍可生效。

不填值会触发 rangeUnderflow 吗?

一般不会。空值是否不合法取决于 required;数值范围不等于必填。

程序里怎么读取具体原因?

读取控件的 validity.rangeUnderflow、rangeOverflow、stepMismatch 等属性,避免解析浏览器提示字符串。

从一道题,走向一组知识

把知识连起来

表单与输入

optgroup 设为 disabled 后,里面的选项会怎样?

<optgroup disabled> 控制选项能否选择,不参与数值约束校验。

表单与输入

表单里的 output 元素适合显示什么?

<output> 可以展示计算结果,但本身不替代数字框校验。

参考资料

  • HTML:表单与输入参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 步进是从基准开始数
  3. 提交与主动检查
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑