dirname是html表单输入元素的属性,仅在提交时自动附加方向字段:需同时满足name存在且dirname值为“name.dir”格式,浏览器依首字符unicode方向推断ltr/rtl并生成对应键值对,不控制显示或交互。

dirname 属性只干一件事:在表单提交时,额外附带一个表示输入内容基础书写方向(ltr 或 rtl)的字段,它不控制显示、不干预光标、也不影响文本流向。
dirname 是怎么生成提交字段的
它依赖两个前提:元素必须有 name 属性,且 dirname 的值必须是 "xxx.dir" 格式(xxx 要和 name 一致)。浏览器会自动根据用户输入的第一个强方向 Unicode 字符(如阿拉伯字母、希伯来字母、拉丁字母)推断方向,并在提交时多加一个键值对:
-
name="msg"+dirname="msg.dir"→ 提交时出现msg=مرحبا&msg.dir=rtl - 如果输入以空格、标点或中性字符开头(比如
" 你好"),方向可能误判为ltr,哪怕后续全是中文 - 没有
name,dirname完全无效 —— 连.dir字段都不会生成
dirname 和 dir 属性必须分开用,不能互相替代
dir 控制渲染与交互:dir="rtl" 让输入框从右往左排版、光标从右开始、回车缩进方向也变;dirname 只管提交数据。常见错误是以为写了 dirname="msg.dir" 就能“让阿拉伯文自动右对齐”,结果页面还是左对齐、光标乱跳:
- 要视觉/行为上支持 RTL 输入,必须显式写
dir="auto"或dir="rtl" - 要后端知道用户这次输的是 RTL 内容,才需要加
dirname - 两者常一起出现:
<input name="msg" dir="auto" dirname="msg.dir">
Safari 兼容性是最大落地障碍
iOS Safari(截至 iOS 17.5)完全不支持 dirname,桌面 Safari 从 v16.4 才开始支持。这意味着:
- Chrome / Firefox 用户提交时有
xxx.dir字段,Safari 用户没有 —— 后端若未做容错,会收不到该字段而报错或逻辑中断 - 不能假设
xxx.dir一定存在;服务器必须检查该字段是否为空或缺失,再 fallback 到其他线索(比如语言标签、首字符检测) - 如果你的用户群含大量 iOS 用户,又必须记录方向,得用 JS 手动读取
getComputedStyle(input).direction或监听输入后调用input.textContent+ Bidi 算法模拟,但精度不如原生dirname
真正容易被忽略的点是:它不解决“如何让输入框适配 RTL”,只解决“如何告诉后端这次输入大概率是 RTL”。方向判定发生在提交瞬间,不是实时的,也无法通过 JS 修改其值 —— 你设 dirname="msg.dir",浏览器就按规则走,没法强制写死成 rtl。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











