dirname 属性仅在表单提交时自动附加 direction 字段(ltr/rtl),须与 name 同时存在且值严格为“name.dir”才生效;方向由首个强方向字符决定,不受 dir 属性或输入法影响;firefox 不支持,ios safari 旧版有 bug;服务端需用方括号访问字段名,且必须做缺失 fallback。

dirname 属性只在表单提交时,自动附加一个表示输入内容基础书写方向的字段(ltr 或 rtl),它不控制显示、不干预光标、也不能被 JS 修改——你加了它,浏览器就按规则走;你没加,后端就收不到方向线索。
dirname 必须和 name 一起用才生效
单独写 dirname="query.dir" 没任何效果。只有同时满足两个条件,浏览器才会在提交数据里多塞一个 query.dir 字段:
-
name属性必须存在,且值为query -
dirname的值必须严格是"query.dir"(不能是"dir"、"direction"或带空格)
漏掉 name,或者写成 dirname="query.direction",浏览器直接忽略该属性,Network 面板里看不到对应字段。
方向值由首个强方向字符决定,不是 dir 属性或输入法切换
很多人以为设了 dir="rtl" 或切到阿拉伯语输入法,dirname 就会发 rtl——其实不是。它的判定逻辑非常“冷酷”:
- 只看用户**聚焦后第一次敲下的那个字符**的 Unicode 双向类别(Bidi Class)
- 空格、标点、数字、拉丁字母 → 推断为
ltr - 阿拉伯字母(
\u0600–\u06FF)、希伯来字母(\u0590–\u05FF)→ 推断为rtl - 中文、日文、韩文字符属于“弱方向”,不触发
rtl,仍按ltr处理 -
dir="auto"对dirname完全无效——它只影响渲染,不参与方向推断
所以用户先输一个空格再输阿拉伯文,dirname 仍可能提交 ltr。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
服务端接收时字段名含点号,不能直接点语法访问
提交后字段名为 query.dir,但这个点号在 JS 对象属性中非法,后端代码不能写 req.body.query.dir:
- Node.js/Express:必须用
req.body["query.dir"]或确保urlencoded({ extended: true })已启用(默认已开) - PHP:
$_POST['query.dir']可直接读取 - Python/Flask:
request.form.get('query.dir') - 如果
name="user[profile]",则 dirname 字段实际是user[profile].dir,需同步处理方括号和点号
更关键的是:Firefox 完全不支持 dirname,iOS Safari 在 iOS 15.4 之前有严重 bug(软键盘弹出后总返回 ltr)。这意味着你不能假设 query.dir 一定存在,必须做缺失 fallback —— 比如检查首字符 Unicode 范围,或结合 Accept-Language 头判断。
dirname 和 dir 属性各干各的事,别混用
dir 控制渲染与交互,dirname 只管提交数据。它们经常一起出现,但职责完全分离:
- 要让输入框右对齐、光标从右开始、回车缩进朝左 → 必须写
dir="auto"或dir="rtl" - 要让后端知道这次输入大概率是 RTL 内容 → 才需要加
dirname="query.dir" - 只写
dirname不写dir:页面仍是左对齐,阿拉伯文会挤在左边,体验极差 - 只写
dir不写dirname:前端显示正常,但后端收不到方向信息,无法做存储或展示适配
真正容易被忽略的点是:dirname 的方向判定只发生一次,在提交瞬间完成,且完全不可控——你没法用 JS 改它,也没法让它“重算”。它不是实时监听器,只是一个基于首次输入的快照。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










