value属性是唯一标准写法,placeholder仅作提示不参与提交;value决定初始显示、提交内容和reset恢复值,必须为转义后的字符串,动态设置需操作dom value property而非attribute。

value属性是唯一标准写法,不是placeholder
HTML里设输入框默认值,value属性是唯一被浏览器识别为“真实默认值”的方式。它决定页面一加载就显示什么、用户没动过时提交什么、表单重置后恢复成什么。
常见错误是把placeholder当默认值用:placeholder="张三"只是灰色提示,焦点一进就消失,且完全不参与提交——后端收不到,form.reset()也恢复不了它。
-
value必须是字符串,数字要加引号:value="18"✅,value=18❌(HTML属性值不加引号易引发解析错误) - 服务端渲染时,用户数据必须做HTML实体转义,否则双引号或
会崩坏标签结构,例如原始值<code>O'Reilly要转成O'Reilly - type为
date时,value必须是YYYY-MM-DD格式;number时不能带逗号、单位或空格,否则浏览器静默清空
JS动态赋值必须操作value property,不是setAttribute
页面加载后想从localStorage或URL参数填默认值,得直接改DOM元素的value属性(即property),不是HTML attribute。
错例:el.setAttribute('value', '李四')看似生效,但后续用户输入再提交,表单可能仍发旧值——因为浏览器已把当前值和HTML属性脱钩。
- 正确写法:
el.value = '李四'(原生JS)或$(el).val('李四')(jQuery) - 执行时机必须在
DOMContentLoaded之后,避免元素还没挂载 - 如果输入框绑了Vue/React的双向绑定,光改
value不够,还得触发事件:el.dispatchEvent(new Event('input', { bubbles: true }))
表单重置(reset)只认HTML初始value,不认JS改过的值
点<button type="reset"></button>或调用form.reset(),浏览器只会把每个字段恢复成**最初解析HTML时的value属性值**,不是你后来用JS设置的el.value。
典型翻车:HTML写<input value="默认值"> → JS执行el.value = "新内容" → 点reset → 输入框变空,不是变回“默认值”。
- 验证方式:
el.getAttribute('value')返回初始HTML值,el.value返回当前property值,两者常不一致 - 如需支持JS动态初始值+可靠重置,可提前存一份:
el.dataset.initial = data.name,然后监听reset事件:el.value = el.dataset.initial || "" -
textarea的默认值必须写在标签体内,value属性无效;checkbox/radio要用checked,不是value
框架项目里别混用value和defaultValue
React中写<input value="张三">会变成受控组件,但没配onChange就锁死输入;Vue里直接插v-model到未初始化的ref会报错。
纯HTML场景下defaultValue基本用不上——它是只读property,仅在首次挂载时起作用,后续改它无效。
- React推荐:
const [name, setName] = useState("张三")+<input value="{name}" onchange="{e"> setName(e.target.value)} /> - Vue推荐:
const name = ref("张三")+<input v-model="name"> - 非受控场景(比如表单里混用原生和框架逻辑),可用
defaultValue,但要注意它不会响应后续props变化
value却不派发事件,数据层根本不知道变了。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











