2011-08-01 27 views
1

ARIA属性是否需要存在于实际的HTML中?或者,它们可以在运行时通过Javascript添加吗?ARIA属性,DOM和优雅劣化

考虑以下情形......

<button id="submit" type="submit">Submit</button> 
<div id="validation-message"></div> 

如果用户的浏览器没有使用Javascript,我们向他们展示了新的一页(由服务器处理和生成)的验证。如果用户的浏览器确实有Javascript,我们用以下代码扩充上述HTML,然后在DIV中动态显示验证。

$('#submit').attr({'aria-haspopup':true, 'aria-owns':'validation-message'}); 
$('validation-message').attr({'role':'alert', 'aria-live':'assertive'}); 

我想另外一个问题是,它会直接在HTML源代码中直接使用这些ARIA属性吗?如果Javascript不存在,ARIA会做什么吗?

回答

4

ARIA Landmark角色可以直接放入标记中,即使JavaScript被禁用,它们也可以是有益的。如果ARIA属性描述的功能仅在启用JavaScript时可用,那么我认为可以使用JavaScript添加这些属性。

+0

地标角色我可以看到没有JavaScript的意义。但是,像“咏叹调”这样的属性并不是那么重要。 – Bart

0

W3C文档(工作草案)Using WAI-ARIA in HTML在条款Add ARIA inline or via script?中建议使用脚本添加ARIA属性,而不是使用HTML标记编写。然而,它补充说,如果“不依赖脚本来提供交互行为”,或者“仅在支持脚本的浏览上下文中支持内容和交互”,则该属性可以用标记编写。

这是有点间接的,甚至可能是人为的说法,即将属性置于标记中大多数情况都可以。例外情况是属性表示一种没有脚本的情况下有意义的关系,但在脚本禁用时会提供错误的信息。我想说aria-haspopup可能属于这个类别,因为一个元素可能会有一个没有脚本的弹出窗口,但是目前它必须用脚本来实现 - 所以当禁用脚本时,浏览器可能仍然期望aria-haspopup具有相关性并且会因此得出不正确的结论。