textarea初始值必须写在标签体内,不能用value属性;正确写法是默认文字,该文字也是reset时恢复的defaultvalue来源。

textarea初始值必须写在标签内部,不能用value属性
这是最常踩的坑:给 <textarea value="hello"></textarea> 写 value 属性,页面完全不生效。W3C 明确规定 textarea 没有 value HTML 属性,它的初始内容只能是开始与结束标签之间的文本。
正确写法只有这一种静态方式:<textarea>这里是默认文字</textarea>。注意,这个“默认文字”会在表单重置(<input type="reset">)时恢复,它就是 defaultValue 的来源。
- 不要试图用
value属性初始化,浏览器会忽略 -
placeholder不是默认值,只是提示语,聚焦后消失,提交时不会发送 - 服务端渲染时,把真实数据插进标签体里是最稳妥的(如 PHP echo、JSX 插值)
动态设置默认值要用 JavaScript 的 value 或 defaultValue
如果默认值来自接口、localStorage 或用户行为,就得靠 JS。但要注意两个属性的区别:
-
element.value = "新内容":直接改当前显示值,**不影响重置行为** -
element.defaultValue = "新内容":改的是“重置目标值”,下次点 reset 会回到这个值 - 首次加载后想让 JS 设置的值也能被 reset 恢复,必须同时设
value和defaultValue
示例:
const ta = document.getElementById("myTa");<br>ta.value = "从 localStorage 读的草稿";<br>ta.defaultValue = ta.value;
别用 innerHTML 或 textContent 读写内容
虽然 innerHTML 看似能取到标签内的初始文字,但它不可靠:一旦用户输入过,innerHTML 就不再更新;而 textContent 在某些旧版 IE 中返回空字符串。
- 始终用
element.value读写当前内容(包括换行符\n) - 提交前检查
value.trim() === "",而不是看innerHTML是否为空 - 后端接收时注意:换行在表单提交中编码为
%0A,不是\r\n,解析逻辑要匹配
自适应高度场景下,默认值会影响初始高度计算
如果你用 input 事件监听 + scrollHeight 实现自动撑高,那初始默认文字的行数会直接影响第一次渲染的高度。
- 设完
value后,需手动触发一次高度重算(比如ta.style.height = "auto"; ta.style.height = ta.scrollHeight + "px";) - 避免在 DOM 渲染完成前就调用
scrollHeight,否则可能取到错误值 - CSS 必须包含
box-sizing: border-box,否则边框和 padding 会导致高度偏差
真正容易被忽略的点是:defaultValue 虽然语义清晰,但大多数框架(React/Vue)和开发者只操作 value,结果表单重置功能形同虚设——除非你显式同步两者。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











