咏叹调角色='警报'没有被NVDA看到

时间:2013-05-16 22:10:42

标签: accessibility wai-aria

我有以下div标签:

<div id="ErrorMsg" 
      role="alert" 
      class="alert alert-error" 
      style="display:none;">
        Email or password incorrect
</div>

当我触发这个jQuery时,它变得可见,但不会被宣布为警报。

$('#ErrorMsg').show();

在我执行无效检查后,这会添加到页面中:

ScriptManager.RegisterClientScriptBlock(
        this, 
        GetType(), 
        "Error", 
        "$('#ErrorMsg').show();", 
        true);

我正在使用NVDA进行测试,该页面是一个带有更新面板的aspx页面。我尝试删除面板,但这似乎不是问题。一切正常,只是没有警报通知。正在检查的文本框具有设置的标签,并指向div标签id。

1 个答案:

答案 0 :(得分:1)

我想说问题是两件事之一。

还有其他DOM事件正在发生,并在读取之前中断警报。对此的一个解决方案是使用aria-live =“粗鲁”,尽管这对NDVA没有帮助,因为这仍然是非中断的。

您可以使用$('#ErrorMsg')。focus()将焦点放在元素上。您还需要在元素上放置tabindex =“0”。 e.g。

<div id="ErrorMsg"
      role="alert"
      tabindex="0"      
      class="alert alert-error" 
      style="display:block;">
        Email or password incorrect
</div>

另一个问题可能是ScriptManager.RegisterClientScriptBlock刷新页面(我不是.NET开发人员所以我可能错了)。既然如此,上述解决方案也应该有效。

然而,如果这种方法有效,则屏幕阅读器用户可能会“迷失”它们在页面上的位置。因此,您可能需要将ErrorMsg元素更改为链接到电子邮件或密码输入框的元素。

希望这有帮助。