表单初始值必须用html的value属性写死,不可用js赋值,否则form.reset()失效;value是提交值,placeholder仅为提示;value必须加引号且服务端需转义。

表单初始内容必须靠 HTML 属性写死,不是 JS 赋值能替代的;否则 form.reset() 会失效,用户点重置按钮后回不到你想要的状态。
input 文本类元素用 value 属性设初始值
直接在标签里写 value="xxx",浏览器渲染时就显示出来,提交时也发这个值。它不是 placeholder,placeholder 只是提示文字,不参与提交。
-
value必须是字符串,value=123(没引号)可能被解析失败,要写成value="123" - 服务端模板里务必转义,比如 Jinja2 用
{{ user.email|e }},否则邮箱里带"或会导致 HTML 截断 - React/Vue 中如果用了
value属性但没配状态更新逻辑(如onChange),输入框会变只读——这是受控组件的强制行为,不是 bug -
getAttribute('value')拿到的是 HTML 里写的初始值,input.value拿到的是当前用户输的内容,两者可能完全不同
radio/checkbox 用 checked 控制默认选中
同组 radio 只能有一个带 checked,且 name 必须完全一致(大小写、空格都敏感);checkbox 可多个同时 checked,互不影响。
-
checked是布尔属性,写checked、checked=""都算启用,别写checked="false"——那反而被当成真值 - 服务端模板里别拼
checked="{{ $user->is_subscribed }}",因为0或空字符串也会被渲染成checked="0",照样触发默认选中 - JS 设置
el.checked = true不等于“设为默认”,form.reset()后它会回到 HTML 里定义的那个状态,不是你 JS 设的 - 自定义 checkbox 样式时,
checked属性仍是唯一能驱动伪元素切换的依据,删了就失效
select 下拉框用 selected 标记默认选项
selected 必须写在 <option></option> 上,不是 <select></select> 标签上;有 multiple 属性时才能多选,默认只认第一个 selected。
- 多个
<option selected></option>不报错,但浏览器只高亮第一个 - Vue/React 中 HTML 的
selected基本无效:Vue 依赖v-model绑定的数组,React 依赖value状态,它们初始化时只比对值是否匹配,类型也要一致(比如后端返回数字1,state 得初始化为'1'字符串) - 异步加载
<option></option>时,别在数据为空时就渲染<select></select>,否则绑定值找不到匹配项,下拉框显示为空白 -
type="date"或type="number"的value格式错一点(比如日期写成"2026-9-21"缺零),整个输入框就变空,不报错也不提示
reset 按钮只恢复 HTML 初始值,不认 JS 修改
<input type="reset"> 或 form.reset() 的行为非常明确:它只把所有字段拉回到页面刚加载完时 HTML 中声明的 value、checked、selected 状态,JS 后续任何赋值都不算数。
- 想让重置按钮回到某个动态初始值(比如从 URL 参数或 localStorage 读的),就得在页面加载时用 JS 主动写进 HTML 属性,而不是只改 DOM 的
value或checked - Safari 隐私模式下
localStorage可能直接抛错,读取时必须包try/catch - 手动重置部分字段时,注意
textarea的初始内容不在value属性里,得写在标签体内:<textarea>默认文字</textarea> - disabled 或 readonly 字段的
value也要正确设置,否则提交时可能漏值,JS 读取时也可能拿不到预期内容
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











