表单里的 output 元素适合显示什么?
滑块选价、数量乘单价等即时计算结果可以用 output 表达。for 能把计算结果与输入关联,展示的金额却不能当作可信订单价格,也不会自动替代要提交的输入值。 计算展示与表单提交是两套机制,服务器仍须按可信单价重新计算总额。
表单专题面试题第 2 页,显示第 51–100 题,共找到 157 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
滑块选价、数量乘单价等即时计算结果可以用 output 表达。for 能把计算结果与输入关联,展示的金额却不能当作可信订单价格,也不会自动替代要提交的输入值。 计算展示与表单提交是两套机制,服务器仍须按可信单价重新计算总额。
手机号或邀请码输入框可用 pattern 做原生格式约束,再用 title 解释用户应怎样填写。正则要匹配整个值;空值是否无效取决于 required,格式错误可由 patternMismatch 判断,title 不能充当唯一提示。
CSS 的 :placeholder-shown 可在占位文字正在显示时给输入框样式,但它不是通用的空值或校验状态判断。再比较与 :not(:placeholder-shown) 的用法,并说明 placeholder、输入类型和空格值等因素如何影响命中。
一组单选框共享 name 才能互斥,提交时也以这个名字传选中项的值。通过配送方式示例说明 checked 初始状态、多个 checked 的解析结果、required 的组级校验,以及为什么同页不同问题不能复用一个 name。
滑块并不等于另一种数字输入框。range 始终有区间内的值,初始值通常是中点;精确数字输入、留空等需求则更适合 number 或文本控件。 还要给当前数值提供可见说明,让键盘与辅助技术用户知道滑块停在哪里。
看起来都不能编辑的字段,提交与交互行为可能完全不同。再比较 readonly 的可聚焦和可提交、disabled 的不可交互与不提交,并说明哪些输入类型、textarea、select 适用哪种属性,以及必填校验如何受影响。
想用脚本触发与用户点击提交按钮相同的流程,应调用 requestSubmit()。它先运行约束校验,成功后才触发 submit 事件;旧的 submit() 绕过两者。传入按钮还会影响提交数据和覆盖属性。
必填并不总是“字符串不能为空”。再比较文本输入、单选组、复选框与下拉框的 valueMissing 条件,说明单选的组级约束、复选框逐项约束、默认选项问题,以及禁用与只读状态为何不能照搬普通必填逻辑。
多选 select 的 value 只返回首个选中 option 的值;要取全部应遍历 selectedOptions,提交到表单时则以同一个 name 发送多个值。FormData.get 也只拿到一项,getAll 才能得到完整数组;没有选中项时还要处理空结果。
select 的 size 控制可见选项行数,multiple 才决定能否同时选择多个值。再比较默认下拉框与列表框的呈现,说明单选列表可以显示多行却仍只选一项,以及多选时如何用键盘操作和读取数据。
自然的 DOM 顺序通常就是最容易理解的键盘焦点顺序。正数 tabindex 会把元素提前,动态表单因此难维护;脚本可聚焦与日常 Tab 顺序又是两件事。 错误提示可以用 -1 让脚本聚焦,但不应因此插入普通键盘导航链。
搜索字段和普通文本框都能接收字符串,但 search 给浏览器提供了搜索语义,可能出现清除按钮或特定键盘提示。两者共享基础文本能力,原生清除按钮和键盘外观却不能写死;搜索动作仍需表单提交或脚本处理。
时间输入的 step 以秒为单位,60 表示一分钟一档,900 表示十五分钟一档。步进基准决定合法时刻,偏离时会出现 stepMismatch;原生选择器显示的分钟选项不一定覆盖全部输入路径。
type="url" 的输入框会按 URL 语法做基础校验,省略协议的地址通常不能通过;空值是否允许还取决于 required。validity.typeMismatch 能识别格式错误,pattern 可再收紧业务格式,但这些浏览器检查不能代替服务端验证。
表单业务规则超出 required、pattern 等原生约束时,可用 setCustomValidity 写自定义错误消息。非空错误消息会让控件持续无效,用户改对后必须清空;input 事件与 reportValidity() 可配合反馈。
周输入控件使用 ISO 周编号而不是普通日期字符串。ISO 周以周一开始,第一周和跨年归属有明确规则,有些年份还有第 53 周;格式正确也不等于业务日期范围正确。
input 通过 list 引用 datalist 中的 option 后,浏览器会提供输入建议,但用户仍可提交列表之外的合法值。城市搜索等开放输入适合它;若选项必须受控,应使用 select 或额外校验,还要留意浏览器和辅助技术的呈现差异。
type="radio" 适合一组互斥选项,同一表单里相同 name 的单选按钮组成一组,一次通常只能选一个。type="checkbox" 表示可独立勾选的选项,多项可同时选中。
<label for="id"> 的 for 值对应某个可标注表单控件的唯一 id。关联后,点标签文字也能聚焦输入框或切换复选框,并给控件提供可理解的名称。也可以把控件直接放进 <label> 做隐式关联。
<input type="text"> 是单行文本控件,用户输入的换行不会作为多行编辑界面呈现;<textarea> 是专门的多行文本控件。textarea 的初始值写在开始和结束标签之间,不写 value 内容属性。
<output> 表示由计算或用户操作产生的结果,例如滑块选择数量后显示总价。它具有表单结果语义,可用 for 列出参与计算的控件 id,也可用 name 让脚本和表单结构更易识别。
城市下拉框选项多时,optgroup 可以给华东、华南等选项加组名,选中后提交的仍是 option 的值。label 命名分组,disabled 可禁用整组;占位选项和真正选项的放置还会影响 required 识别,分组也不能嵌套成树。
HTTP 303 See Other 的语义是什么,为什么它常用于表单提交后的重定向? 本文先给出可直接复述的结论,再用最小代码说明303 See Other POST 重定向的工作方式、判断依据、项目边界和常见误区。
HTTP 400 与 422 状态码在表单校验失败场景下应如何选择? 本文先给出可直接复述的结论,再用最小代码说明HTTP 400 422 校验失败的工作方式、判断依据、项目边界和常见误区。
new Date 解析失败不会返回 null,也不报错,而是得到一个时间值为 NaN 的 Date 对象。讲清为什么 instanceof 判断不出来,怎么用 Number.isNaN 配合 getTime 检测,以及 2 月 31 日这种会被自动进位、根本不算无效的日期怎么校验。
英语只有单数和复数两种,俄语有三种,阿拉伯语有六种,用 count === 1 判断只对英语有效。讲清 Intl.PluralRules 的 select 返回什么、怎么配合文案表使用、ordinal 模式怎么生成 1st 2nd 3rd,以及为什么文案表必须有 other。
在高频率表单提交场景中,如何避免重复提交导致的数据不一致? 本文先给出可直接复述的结论,再用最小代码说明Next.js 表单 重复提交 高频提交 防抖策略的工作方式、判断依据、项目边界和常见误区。
当 Server Actions 中的表单数据验证失败时,如何将错误信息准确回传至客户端? 本文先给出可直接复述的结论,再用最小代码说明Next.js 表单 Server Actions 验证失败 错误回传 客户端展示的工作方式、判断依据、项目边界和常见误区。
在表单中使用 Server Actions 时,如何正确处理多步提交流程中的状态管理? 本文先给出可直接复述的结论,再用最小代码说明Next.js Server Actions 多步表单 状态管理方案的工作方式、判断依据、项目边界和常见误区。
系统调用被信号打断返回 EINTR,哪些调用能自动重启哪些不能? 本文先给出可直接复述的结论,再用最小代码说明EINTR 慢系统调用 SA_RESTART 自动重启的工作方式、判断依据、项目边界和常见误区。
poll 相比 select 改进了什么,又保留了什么共同缺陷? 本文先给出可直接复述的结论,再用最小代码说明poll select 区别 共同缺陷 O(n)的工作方式、判断依据、项目边界和常见误区。
select 在高并发下的三个主要瓶颈是什么? 本文先给出可直接复述的结论,再用最小代码说明select FD_SETSIZE 1024 遍历 性能瓶颈的工作方式、判断依据、项目边界和常见误区。
select、poll、epoll 在 fd 数量增长时性能差异的根源是什么? 本文先给出可直接复述的结论,再用最小代码说明select poll epoll 区别的工作方式、判断依据、项目边界和常见误区。
Background Sync 如何在用户恢复网络后重放离线期间提交的表单请求? 本文先给出可直接复述的结论,再用最小代码说明Background Sync 离线请求重放的工作方式、判断依据、项目边界和常见误区。
什么是 React 的复合组件模式,为什么 Select/Option 这类组件适合用它设计? 本文先给出可直接复述的结论,再用最小代码说明React 复合组件 compound component Context的工作方式、判断依据、项目边界和常见误区。
React 表单应该选择受控还是非受控,依据是什么? 本文先给出可直接复述的结论,再用最小代码说明React 受控和非受控表单怎么选择的工作方式、判断依据、项目边界和常见误区。
React 非受控输入的 defaultValue 改了,为什么当前内容没跟着变? 本文先给出可直接复述的结论,再用最小代码说明React defaultValue 改变输入框不更新的工作方式、判断依据、项目边界和常见误区。
React 文件输入为什么不能像文本框一样用 value 控制,怎样读取文件? 本文先给出可直接复述的结论,再用最小代码说明React file input 非受控读取文件的工作方式、判断依据、项目边界和常见误区。
React 表单提交成功后,受控与非受控表单各自该如何重置? 本文先给出可直接复述的结论,再用最小代码说明React 表单 重置 form.reset key 重挂载的工作方式、判断依据、项目边界和常见误区。
React 表单里哪些值不应该放进 state,如何避免冗余状态导致的不一致? 本文先给出可直接复述的结论,再用最小代码说明React 表单 state 派生值 冗余状态的工作方式、判断依据、项目边界和常见误区。
React 表单的校验应该在输入时、失焦时还是提交时触发,如何为不同字段选择时机? 本文先给出可直接复述的结论,再用最小代码说明React 表单校验 触发时机 onBlur onChange的工作方式、判断依据、项目边界和常见误区。
React 非受控表单在提交时如何一次性读取所有字段的值? 本文先给出可直接复述的结论,再用最小代码说明React 非受控表单 FormData onSubmit 读取的工作方式、判断依据、项目边界和常见误区。
区分编辑字符串、空值和合法业务数字,解释 Number 空字符串、valueAsNumber 与 NaN 的边界,并用完整 JSX 示例演示保留空输入、提交时校验与数值转换。
React 表单如何防止用户在请求未完成时重复提交? 本文先给出可直接复述的结论,再用最小代码说明React 表单 防止重复提交 pending 禁用的工作方式、判断依据、项目边界和常见误区。
React 19 中 form 的 action 属性和传统 onSubmit 处理方式有什么区别? 本文先给出可直接复述的结论,再用最小代码说明React 19 form action useActionState的工作方式、判断依据、项目边界和常见误区。
设计一个可复用的 React 表单字段组件时,props 接口应该怎么设计才好用? 本文先给出可直接复述的结论,再用最小代码说明React 可复用 表单字段组件 props 设计的工作方式、判断依据、项目边界和常见误区。
解释原生 select multiple 的字符串数组 value、selectedOptions 与 FormData.getAll,说明选项删除、异步回填、空选择和选中顺序的业务边界。
React 多字段表单怎样共用 onChange,哪些控件需要单独处理? 本文先给出可直接复述的结论,再用最小代码说明React 多个 input 共用 onChange的工作方式、判断依据、项目边界和常见误区。
为什么 React 的 textarea 用 value 属性而不是子节点设初始内容,这和 HTML 有何不同? 本文先给出可直接复述的结论,再用最小代码说明React textarea value 子节点 区别的工作方式、判断依据、项目边界和常见误区。
为什么 React 19 的 useFormStatus 必须写在 form 内部的子组件里才有效? 本文先给出可直接复述的结论,再用最小代码说明React 19 useFormStatus 子组件 form的工作方式、判断依据、项目边界和常见误区。