dirname 是表单控件属性,用于向服务器提交用户输入文本的原始方向(rtl/ltr),仅对特定 input 类型和 textarea 有效,需配合 name 使用,不控制显示且 Safari 当前不支持。

dirname 不是用来“提交文本方向”的,它是一个表单控件的属性,作用是告诉服务器用户在该字段中输入的文本语言方向(rtl 或 ltr),仅当文本内容本身具有明确方向性(比如阿拉伯语、希伯来语输入)时才有意义。它不控制显示、不改变 CSS 方向、也不影响提交值本身。
什么时候该用 dirname?
只在需要后端处理双向文本(BiDi)场景下才需启用,例如多语言 CMS、国际化表单、或需要按方向做内容审核的系统。普通中文/英文表单几乎不需要它。
- 用户可能输入阿拉伯语(
dir="rtl")、希伯来语等从右向左书写的文本 - 后端需要区分“这段文字本意是 rtl”还是“只是被 CSS 强制设为 rtl”
- 你已在
<input>或<textarea>上显式设置了dir="auto"或依赖浏览器自动探测
dirname 的写法和实际效果
它必须作为属性直接写在支持的表单元素上,值固定为字符串 dirname(无值或空字符串都无效),浏览器会自动在提交时附带一个名为 xxx.dir 的额外字段(xxx 是该元素的 name)。
<form method="POST"> <input type="text" name="comment" dirname="comment.dir"> <button type="submit">提交</button> </form>
当用户在该输入框中键入 RTL 文本(如 "مرحبا"),且浏览器判定方向为 rtl,提交的表单数据中会多出一项:comment.dir=rtl。若方向为 ltr,则值为 ltr;若未触发方向检测(如纯 ASCII 英文),该字段可能不提交或为空。
立即学习“前端免费学习笔记(深入)”;
容易踩的坑
这个属性非常冷门,兼容性和行为细节极易出错:
-
dirname只对<input type="text">、<input type="search">、<input type="tel">、<input type="url">和<textarea>有效,type="email"或type="number"不支持 - Chrome 和 Firefox 支持,但 Safari 目前(截至 Safari 17.4)仍不支持
dirname,提交时不会发送方向字段 - 不能靠它“修复”显示问题——
dir属性或 CSSdirection才控制渲染;dirname只是传递语义信息 - 如果元素没有
name,dirname值不会出现在提交数据中(浏览器忽略)
真正要控制文本方向显示,用 dir="rtl" 或 dir="auto";要让后端知道用户输入的原始方向意图,才加 dirname。两者常配合使用,但职责完全不同。别指望它替你解决 CSS 对齐或输入光标跳转问题。



















