textarea默认内容必须写在标签体内,value属性无效;正确方式是用标签体文本或JS设置defaultValue,二者需同步以确保reset()行为符合预期。

textarea 默认内容只能写在标签体内,不能用 value 属性
直接给 <textarea> 加 value="xxx" 是无效的——它根本不是 <textarea> 的合法属性。浏览器会忽略这个设置,输入框里依然为空。这是新手最常踩的坑,尤其从 <input> 切过来时容易惯性写错。
正确方式只有一种:把默认文本放在开始和结束标签之间:
<textarea name="comment">请在此输入您的反馈意见</textarea>
这个文本会在页面加载时直接显示,并且在表单重置(<form> 调用 reset())时恢复为该值。
- 如果用 JS 动态设置初始内容,应操作
defaultValue属性,而不是value:el.defaultValue = "新默认值" -
value属性反映的是当前用户输入后的实时值,修改它不会影响重置行为 - 服务端渲染时,务必把原始数据插进标签体,而非试图塞进
value属性
JS 修改 defaultValue 后,reset() 才能还原它
defaultValue 不是只读的,但它的作用仅限于「表单重置时回退的目标值」。如果你用 JS 改了它,之后调用 form.reset(),<textarea> 就会回到你设的那个 defaultValue,而不是最初 HTML 里写的文本。
立即学习“前端免费学习笔记(深入)”;
示例场景:编辑弹窗中预填历史备注,用户可能取消修改并点「重置」,这时就需要提前同步 defaultValue:
const ta = document.getElementById("remark");
ta.defaultValue = savedRemark || ""; // 确保 reset() 有效
ta.value = savedRemark || ""; // 同时设当前值,保证立即可见
- 只改
value不改defaultValue→reset()后变回 HTML 初始内容,不是你期望的“上次保存值” - 两者都设,才能兼顾显示和重置逻辑
- React/Vue 等框架中,受控组件通常不依赖
defaultValue,而是靠 state 驱动,此时无需手动操作该属性
placeholder 和 defaultValue 完全不是一回事
placeholder 是提示文字,用户一输入就消失,且不参与表单提交;defaultValue 或标签体内容才是真实默认值,会随表单一起提交,并被 reset() 恢复。混淆这两者会导致默认值“看起来有、实际没传”的问题。
- 不要用
placeholder="请输入..."代替默认内容——它不会被提交 - 若需“有提示 + 有默认值”,可同时写:
<textarea placeholder="请输入评论">已确认发货</textarea> - 注意:placeholder 文字颜色浅、字体小、无换行,不适合放长文本或结构化内容
resize: none 生效的前提是 overflow 不为 visible
想禁用右下角拖拽缩放?只写 resize: none 很可能无效。因为 CSS 规范要求:resize 只在 overflow 为 auto、hidden 或 scroll 时才起作用,而 <textarea> 默认是 overflow: visible。
安全写法(内联最稳):
<textarea style="resize: none; overflow: auto;"></textarea>
- 用 class 控制时,确保选择器权重足够,避免被 Ant Design/Element Plus 等 UI 库覆盖
- 移动端建议加
min-height和max-height,否则resize: vertical可能拉得过高撑破布局 - 别全局重置
textarea { resize: none; }——调试日志面板、代码编辑器等需要二维调整的场景会被误伤
真正容易被忽略的是:默认内容是否参与表单校验、是否被后端接收、是否在 reset 时按预期还原。这三个点串起来,才是一个完整可用的默认值闭环,缺一不可。



















