真正该用、必须理解的 input 属性是 type、name、value、required、disabled、readonly、placeholder、maxlength;其中 name 比 id 更关键,因表单提交时后端只认 name 键名,id 仅用于 CSS 或 JS 定位,漏写 name 则字段无法提交。

直接说结论:真正该用、必须理解的 input 属性就那几个——type、name、value、required、disabled、readonly、placeholder、maxlength,其余属性要么场景极窄,要么浏览器兼容差或语义模糊。
为什么 name 比 id 更关键?
表单提交时,后端只认 name 对应的键名,id 仅用于 CSS 或 JS 定位。漏写 name,哪怕用户输得再认真,后端也收不到这个字段。
-
radio和checkbox必须靠相同name归为一组,否则无法实现“单选”或“多选语义” -
name值里别用空格或点号(如user.name),部分老框架会解析失败;推荐下划线或中划线(user_name) - 动态生成的
input(比如 JS 追加的行),如果没设name,提交时自动被忽略
disabled 和 readonly 看似相似,行为完全不同
两者都让输入框变灰不可编辑,但提交行为天差地别:
-
disabled:字段**完全不参与表单提交**,后端收不到该name键值对 -
readonly:字段**仍会提交**,只是用户不能改——适合展示预计算结果(如总价)、或回显只读数据(如用户 ID) - 移动端上,
disabled输入框不会触发软键盘;readonly会聚焦但禁止输入,部分安卓机型仍可能弹出键盘,建议加inputmode="none"抑制
placeholder 不是 label 的替代品
这是最常被误用的点:placeholder 是临时提示,一输入就消失;label 是永久语义标识,影响可访问性(屏幕阅读器依赖它)、点击穿透(点击 label 可聚焦对应 input)。
立即学习“前端免费学习笔记(深入)”;
- 仅用
placeholder而无label,WCAG 2.1 直接判失败 -
placeholder文本不能表达必填逻辑(比如写“必填邮箱”不如用required+ 正确label) - 不要把长说明塞进
placeholder,iOS Safari 会截断,且不支持换行
value 在不同 type 下行为不一致
同一个属性,在不同控件里作用机制不同,硬套会出 bug:
-
type="text"/"password"/"email":设置初始显示值,JS 可通过el.value读写 -
type="checkbox"/"radio":value是**提交时发送的字符串值**,和是否勾选无关;是否默认选中由checked控制 -
type="file":**value是只读的文件路径(实际是伪路径),不能用 JS 赋值来“预设上传文件”**,这是安全限制 -
type="submit"/"button":value决定按钮上显示的文字,不是表单数据
容易被忽略的是:所有这些属性里,type 是唯一决定渲染形态和底层行为的开关;其他属性都是在 type 框架内起效。选错 type,后面加再多属性也救不回来——比如想用 number 却写了 text,min/max 就完全无效。



















