网易首页 > 网易号 > 正文 申请入驻

屏幕显示已选中,代码里两个标签却都没选

0
分享至

通知标签页开着,面板就在屏幕上:“选择你希望接收的邮件和推送提醒。”VoiceOver 落到另一个标签上,念出:Account,已选中,标签,1/2,提醒偏好,标签组。而停在通知标签上时,它念的是:通知,标签,2/2。没有“已选中”。你看到的标签,不是代码认定的标签。


WCAG 4.1.2 名称、角色、值包含三部分。此前拆过自定义 div 冒充复选框的案例,问题出在角色——控件从没告诉 VoiceOver 自己是个复选框。这次的问题出在值:名称和角色都对(Account,标签,1/2),错的是状态。

两个案例都来自真实的无障碍树与 VoiceOver 录制。案例一,role="tab" 却完全没有 aria-selected;案例二,aria-selected 被写死成字面值。选中状态藏在 CSS 类名里,辅助技术读不懂类名。

案例一:状态根本没暴露

标签列表本身是真的:role="tablist" 带 aria-label,两个按钮带 role="tab"。当前标签只是换了个背景类,标记里没有任何地方说明哪个被选中。

首次加载、Account 视觉上处于激活态时,VoiceOver 念的是“Account,已选中,标签,1/2”。听起来没问题,但标记里并没有 aria-selected。录制记录特别注明:VoiceOver 可能在没有对应程序化值的情况下念出“已选中”,不能拿它当依据。

激活通知、通知面板可见之后,它念:“通知,标签,2/2。你当前位于一个标签上,2/2。要选择此选项,请按 Control-Option-Space。”它在要求你选择一个你刚刚已经选中的标签。

无障碍树里的记录更直接:

  • tablist "Account settings",multiselectable: false
  • tab "Account" — focusable: true,selected: false
  • tab "Notifications" — focusable: true,selected: false

两个标签,一个都没选中。屏幕上一个面板开着,代码里一个选中状态都没有。缺少 aria-selected,树里的选中状态就不会跟随视觉上的激活标签。

案例二:状态写死了

这是半吊子修复。有人读到“要加 aria-selected”,就加了——加成了字面值。点击会更新 case2Active,它切换样式和面板,但 aria-selected 从不读这个状态。首次加载时看起来甚至是对的,因为 Account 本来就是起始标签。只有切换之后,bug 才露出来。

通知获得焦点、面板可见时,VoiceOver 念:“通知,标签,2/2。”而已经不再是打开标签的 Account,念的是:“Account,已选中,标签,1/2,提醒偏好,标签组。”

树里同样如此:Account 是 selected: true,通知是 focused: true、selected: false。树和 VoiceOver 意见一致,两者都和屏幕不一致。焦点移动了,选中状态没动。

为什么这过不了考试式的检查:4.1.2(A 级)要求用户界面组件的名称和角色可被程序化确定,用户可设置的状态可被程序化设置,且这些项的变化对辅助技术可见。哪个标签被选中,是用户点击标签设置的状态。代码不更新它,辅助技术拿到的就是错的信息。

WAS 规则对自定义组件的要求写得很清楚:aria-expanded、aria-selected、aria-checked、aria-pressed 这类状态必须在界面变化时更新,过期值会误导屏幕阅读器用户。案例一暴露的是“没有选中标签”,案例二暴露的是“选错了标签”——属性在、值也合法,快速检查属性存在与否根本发现不了,因为值是过期的。

两个考试信号值得记住:标签列表里没有任何一个 selected: true,而某个面板可见,说明状态缺失;不是打开标签的那个标签上出现 selected: true,旁边往往还跟着打开标签上的 focused: true,说明状态过期。两种情况都要在切换之后测,而且两个标签都要查,不能只看第一个。

修法:绑定同一个状态

把 aria-selected 绑到驱动激活样式和面板的同一个状态上:激活标签为 true,其余为 false。同一个修法同时修好两个案例。在 React 里,就是让 aria-selected 读 setCase1Active 那套状态;不用框架,就在切换标签的同一处更新属性——不是 CSS 类,也不是写死的 true。

修复后树里的变化:通知面板可见时,案例一中 Account 是 selected: false、通知是 selected: true,通知节点列出 aria-selected: true,Account 节点是 false;案例二中 Account 是 selected: false,通知是 focused: true、selected: true。恰好一个标签被选中,而且就是屏幕上那个。树终于和页面对上了。

VoiceOver 的念法也随之改变。案例二 Account 激活时念“Account,已选中,标签,1/2”。案例一激活标签上的提示是“你当前位于一个已选中的标签上,1/2”。录制里还记录了一次只读状态的念法“已选中”。

需要说明证据边界:修复后激活通知标签的完整 VoiceOver 播报,录制里没有,这里就不引用。修复的证明是上面那棵树——selected: true 恰好落在可见的那个标签上。Account 激活时,未激活的通知标签念的是“通知,标签,2/2。你当前位于一个标签上,2/2。要选择此选项,请按 Control-Option-Space。”

要验证的行为清单:

  • 每个标签列表里恰好一个标签是 aria-selected="true",其余都是 "false"
  • aria-selected 读的是驱动激活样式和可见面板的同一个状态,没有字面 true 或 false
  • 切换标签后再查无障碍树,selected: true 必须跟着可见标签走
  • 把 VoiceOver 移到两个标签上分别听,不能只查第一个,也不能只信首次加载时的听感

属性存在不等于正确。标签的 aria-selected 必须跟随真正打开的那个标签。切换标签,查树,别只查耳朵。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
西媒:袭击卡马文加的巴萨球迷身份确认,俱乐部将予以驱逐

西媒:袭击卡马文加的巴萨球迷身份确认,俱乐部将予以驱逐

懂球帝
2026-10-28 18:01:37
为建数据中心在芬兰非法砍树40万棵,谷歌:停工致歉,将保护水质并在部分土地重新种树

为建数据中心在芬兰非法砍树40万棵,谷歌:停工致歉,将保护水质并在部分土地重新种树

澎湃新闻
2026-10-27 16:26:27
每年从中国赚2千多亿,巴西总统候选人却在电视辩论上拍桌子大骂

每年从中国赚2千多亿,巴西总统候选人却在电视辩论上拍桌子大骂

果妈聊娱乐
2026-08-30 15:34:20
农商行“解散”不是倒闭,手里有存款的中老年人一定要看

农商行“解散”不是倒闭,手里有存款的中老年人一定要看

坠入二次元的海洋
2026-10-28 18:12:21
总有人抱有幻想,我再说一遍,就算失业在家玩,也不要开网约车!

总有人抱有幻想,我再说一遍,就算失业在家玩,也不要开网约车!

乌克兰小静
2026-10-28 07:31:42
中国证券监督管理委员会原党委委员、中央纪委国家监委驻中国证券监督管理委员会纪检监察组原组长王会民受贿案一审宣判

中国证券监督管理委员会原党委委员、中央纪委国家监委驻中国证券监督管理委员会纪检监察组原组长王会民受贿案一审宣判

新华社
2026-10-27 17:01:02
四面环海的永暑岛,地下竟藏着一座“淡水银行”,谁存的?

四面环海的永暑岛,地下竟藏着一座“淡水银行”,谁存的?

纪史行者
2026-10-27 03:30:03
歼20隐身突袭美军航母编队,遭4架F35、2架F22拦截【空战模拟】

歼20隐身突袭美军航母编队,遭4架F35、2架F22拦截【空战模拟】

军武咖
2026-10-27 12:31:37
“受美伊冲突影响、燃油成本过高”,美国一邮轮暂停环球旅行,200余名乘客被迫下船

“受美伊冲突影响、燃油成本过高”,美国一邮轮暂停环球旅行,200余名乘客被迫下船

环球网资讯
2026-10-28 21:29:05
“鱼姐不养鱼”被指喝酒作假:用白开水或东方树叶代替酒,把酒倒进垃圾桶……相关账号可能面临断播、封禁处罚

“鱼姐不养鱼”被指喝酒作假:用白开水或东方树叶代替酒,把酒倒进垃圾桶……相关账号可能面临断播、封禁处罚

南方都市报
2026-10-27 00:09:23
上海新王出世,健康便是底气,京浙恐难阻挡

上海新王出世,健康便是底气,京浙恐难阻挡

艳姐的搞笑视频
2026-10-28 15:52:02
台湾省全岛2300万人,97%的人挤在西部,为啥没人愿意去东部?

台湾省全岛2300万人,97%的人挤在西部,为啥没人愿意去东部?

云霄纪史观
2026-09-29 16:52:56
特朗普再提台海问题,国台办回应亮了,不批特朗普专轰民进党

特朗普再提台海问题,国台办回应亮了,不批特朗普专轰民进党

邱震海
2026-10-28 18:20:12
柿子再次被关注!研究发现:糖尿病吃1次柿子,等于给血糖添堵?

柿子再次被关注!研究发现:糖尿病吃1次柿子,等于给血糖添堵?

汪医生健康百科
2026-10-19 22:25:03
广网首日惊天大冷门!头号种子惨遭横扫,中国黑马夺冠机会来了

广网首日惊天大冷门!头号种子惨遭横扫,中国黑马夺冠机会来了

梦忆之浅
2026-10-28 19:00:20
广东省人大常委会原委员卓毅逝世,享年88岁

广东省人大常委会原委员卓毅逝世,享年88岁

澎湃新闻
2026-10-28 18:58:26
为避免在韩国市场引发争议,苹果悄悄移除当地官网iPad mini(A20 Pro)海报中的手部

为避免在韩国市场引发争议,苹果悄悄移除当地官网iPad mini(A20 Pro)海报中的手部

IT之家
2026-10-27 18:27:17
营收8990亿!碾压华为比亚迪,江苏首富夫妻太低调

营收8990亿!碾压华为比亚迪,江苏首富夫妻太低调

王二哥老搞笑
2026-10-27 01:57:32
球队老板的噩梦!刚签1.1亿就开摆,A史密斯:体育史上糟糕的超巨

球队老板的噩梦!刚签1.1亿就开摆,A史密斯:体育史上糟糕的超巨

你的篮球频道
2026-10-28 07:25:34
梅根重返澳洲捞金计划受挫:政界两党集体发难硬核表态,纳税人一分钱都不给

梅根重返澳洲捞金计划受挫:政界两党集体发难硬核表态,纳税人一分钱都不给

东方不败然多多
2026-10-28 19:09:51
2026-10-28 22:07:00
字节漫游指南
字节漫游指南
有态度网友ytd
183文章数 129关注度
往期回顾 全部

科技要闻

宇树科技前三季净利暴增270%

头条要闻

演员董勇车险续保被卡维权 吐槽太平洋保险"店大欺客"

头条要闻

演员董勇车险续保被卡维权 吐槽太平洋保险"店大欺客"

体育要闻

0胜4负与篮网国王一桌 热火字母哥赌错了?

娱乐要闻

巾帼不让须眉!章子怡拿下重磅荣誉

财经要闻

iPhone Duo七年等来一场吐槽大会

汽车要闻

上市即交付 腾势Z9S诠释豪华体验与用心交付

态度原创

时尚
游戏
艺术
亲子
教育

教你把去年的毛衣,穿出今年的好看

《生化危机》10年内或迎大结局!这么赚钱真不做了?

艺术要闻

新地标:大华银行越南新总部,外形像贝壳!

亲子要闻

萌娃手绘古诗《赠汪伦》,每一笔都是奇思妙想

教育要闻

我们要尊重别人的观点,除非他们的观点是错的

无障碍浏览 进入关怀版