我知道这个问题: 我应该为 JavaScript 链接使用哪个“href”值,“#”还是“javascript:void(0)”?包含关于 javascript 链接的正确 href 内容的讨论。这与 508 合规性有何关系?当单击处理程序在 javascript 代码的其他地方定义时,有谁知道 javascript:void(0) 是否可以接受?
2 回答
这就是术语变得重要的地方——就可访问性而言,没有“javascript 链接”之类的东西。有一些链接,它们是纯粹的锚元素,还有一些 javascript 行为,应该假定它们不可运行以实现可访问性。
触发 javascript 的空锚元素(例如 href='#' onclick='...')不是链接,它是用于触发页面行为的 UI 元素。对于可访问性,不要为此滥用锚元素,请使用具有正确 ARIA 角色的真实 UI 元素。
对于点击链接(执行类似“单击锚点”->“调用魔法 JS”->“window.location 更改为某个新页面”之类的操作),请注意您在语义上歪曲了您的内容。即使您使用的是锚元素,您也不能将其用作链接,因为它不是另一个资源的锚。就像上面的例子一样,它实际上是一个按钮。页面位置最后发生变化的事实并没有改变这一点。
要获得真正的可访问性,您将不得不放弃任何 JavaScript-in-the-middle。但别担心,这远没有听起来那么严重:最简单的解决方案是改用重新路由链接。如果您曾经使用过google.com 或duckduckgo.com 等,那么您将对此很熟悉:与其链接到实际的URL,不如链接到通过无页面脚本代理的URL。您可以保证 URL 为“ http://our.domain.com/ref=http://the.actual.link.to.visit ”的锚点最终会很好地重定向到实际站点,而您当您解决重定向时,可以将“当人们单击”作为服务器端操作执行的任何所需操作。
如果您认为自己依赖 JavaScript,那么 508 合规性将很难。所以对于可访问性:积极尝试不要。如果可以使用它,请丰富它,确保没有它仍然可以工作。
我基本上同意迈克的观点。
这与 508 合规性有何关系?
关于第 508 节的一个常见误解是“哦,我使用 JAWS(或者可能是 NVDA)运行我的网站,并且很好。所以我是合规的。” 第 508 节理论上应该涵盖所有残疾,而不仅仅是失明。当您对繁重的 JavaScript 感到疑惑时,代理机构倾向于使用“软件应用程序和操作系统”(1194.21) 标准以及“基于 Web 的内部网和互联网信息和系统”(1194.22),因为它们更多地谈论 UI 元素。不幸的是,像 WebAIM 这样的地方否认了这一点。
因此,当包含 1194.21 时,标准可以更容易地理解为“您将所有 @alts 和<label>
s 都打开,但是这个站点/应用程序/系统可以使用键盘吗?AKA 是键盘可导航的吗?” 你能找到<span>
那个看起来像一个链接的东西吗?
正如 Mke 所说,帮助解决此问题的一种方法是使用 ARIA。所以,<span>
现在必须是:
<span onclick="Clicky()" role="link">Link</span>
(参考:MDN)
现在回到你的问题:
我知道这个问题:JavaScript 链接的 Href 属性:“#”还是“javascript:void(0)”?当单击处理程序在 javascript 代码的其他地方定义时,有谁知道 javascript:void(0) 是否可以接受?
我会提倡 void,因为当没有定义引用(认为它称为页内引用)时,焦点会回到浏览器框架,而不是停留在链接上。您需要编写一些处理程序来将焦点返回到链接。