textarea 没有 value 属性,其默认值需写在开始与结束标签之间;换行空格会被保留,特殊字符须转义。

textarea 的 value 属性不生效?那是你用错了标签
HTML 中 textarea 没有 value 属性——它靠标签体内容(即开始和结束标签之间的文本)设置默认值。写成 <textarea value="默认内容"></textarea> 完全无效,浏览器会忽略 value,只渲染空内容。
正确做法是把默认文字直接写在 <textarea></textarea> 和 之间:
<textarea name="bio" rows="4" cols="50">请在此填写个人简介</textarea>
- 所有换行、空格都会被保留并显示为初始内容(包括首尾空白),如需干净起始,建议去掉前后换行和缩进
- 如果内容含 HTML 特殊字符(如
&、、<code>>),必须做 HTML 实体转义,否则可能破坏结构;例如原始值是10 ,得写成 <code>10 < 20 - 服务端渲染时(如 PHP/Python/Jinja2),务必对变量内容调用对应转义函数,比如 PHP 的
htmlspecialchars($str, ENT_HTML5, 'UTF-8')
表格中嵌套 textarea 时对齐和尺寸容易错位
在 <td> 里放 <code>textarea 很常见,但默认样式常导致垂直不对齐或宽度溢出。这不是 bug,而是 textarea 默认 display: inline-block 且受 line-height、vertical-align 影响。
- 加
vertical-align: top到<td> 或 <code><textarea></textarea>可解决与同行其他控件(如input、文字)的基线错位 -
cols和rows是粗略提示,实际宽度受 CSSwidth控制更可靠;推荐设width: 100%并配合box-sizing: border-box避免 padding 撑出表格 - 若表格用了
table-layout: fixed,textarea可能被截断,此时需显式设min-width: 0防止内容撑不开 - 安全做法:
document.querySelector('textarea[name="bio"]').textContent = "新默认内容" - 若内容来自用户输入或接口返回,先做 HTML 转义再赋值;Node.js 可用
he.escape(str, { isAttributeValue: false }),前端可用简单正则(仅限可信数据) - 表单重置(
form.reset())会恢复为最初 HTML 中写的标签体内容,不是 JS 后续改的值——这点和input的value属性行为一致,但原理不同 - 不要同时写
<textarea>默认内容</textarea>和placeholder="请输入...",会造成语义冲突(用户看到“默认内容”又看到提示,困惑) - 若字段允许为空且无业务强制默认值,用
placeholder更合适;若有回填逻辑(如编辑页),必须用标签体内容 - 移动端 iOS Safari 对
placeholder渲染位置偶有偏移,而标签体内容无此问题,关键场景优先保真
动态填充 textarea 默认内容要避开 setAttribute
JS 修改默认内容不能用 el.setAttribute('value', ...)——textarea 没这个属性,而且即使写了也不会更新显示。必须操作元素的 textContent 或 innerHTML(后者慎用,有 XSS 风险)。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
立即学习“前端免费学习笔记(深入)”;
placeholder 和默认内容别混用
textarea 支持 placeholder,但它和默认内容是两回事:placeholder 是灰色提示,焦点进入就消失,不参与提交;而标签体内容是真实初始值,用户可编辑、可清空、提交时若未改就照传。
textarea 看似简单,真正麻烦的是默认内容的来源控制:服务端直出要转义,JS 动态填要改 textContent,框架里还要区分受控/非受控。最容易被跳过的,就是那个看不见的换行符——它悄悄成了默认值的一部分。


















