我加入一个JavaScript驱动的子窗口到一个站点。基本上,部分用户界面位于屏幕的左边缘,直到用户触发链接;然后它移动到可见的位置。我有一系列五个test cases,但还没有获得声望点来单独链接它们。的preventDefault(),滚动和无障碍
对于辅助功能目的,我想使用一个链接包含文档片段,从而:
<a href="#quicklinks" id="quicklinks-trigger">Quick Links</a>
使用JavaScript(使用jQuery)对应:
$("#quicklinks-trigger").click(function(e){
$("#shadow").removeClass("default");
$("#shadow").addClass("active");
});
的#quicklinks HREF重定向内部将屏幕阅读器的光标(又名插入符号)添加到新显示的UI的开头。有一个在快速链接子窗口,光标重定向到文件(<a href="#main" id="close-quicklinks"></a>
)的主要部分的相应链接。你可以在测试用例1的动作看这个,如果你听它与屏幕阅读器(我与NVDA测试),屏幕阅读器高兴地跳到快速链接时,链接被触发,并返回到主文档当快速链接关闭链接被触发时。
它还滚动响应文件碎片,这是丑陋和恼人的上下翻页。这可以通过抑制window.preventDefault()
- 看测试案例2,这很顺利运作和文档周围不滚动,即:
$("#quicklinks-trigger").click(function(e){
$("#shadow").removeClass("default");
$("#shadow").addClass("active");
e.preventDefault(); });
不幸的是,在调用preventDefault()方法也阻止浏览器将光标移动到正确的位置。盲人用户可以在那里触发链接,然后屏幕阅读器将按照源代码顺序进行下一项,而不是快速链接用户界面。修复THAT的最简单方法是在触发器链接之后立即放置定义快速链接子窗口的HTML;但是我不能这么做,因为这个注定要用到的CMS不适合插入到菜单中的大块HTML。
我已经尝试了一些其他的方法来消除滚动。测试案例3卷动窗口后面手动:
$("#quicklinks-trigger").click(function(e){
$("#shadow").removeClass("default");
$("#shadow").addClass("active");
window.setTimeout(function(){ scrollTo(0,0); }, 1);
});
...这工作,但有一个明显的生涩的效果,因为它滚动下来,然后回来了,所以这是不超过测试用例更好1.
在测试案例4,我试图用联合的preventDefault()与手动移动内部光标的希望焦点():
$("#quicklinks-trigger").click(function(e){
$("#shadow").removeClass("default");
$("#shadow").addClass("active");
$("#quicklinks").focus();
e.preventDefault();
});
但它没有工作,因为#quicklinks是一个DIV,而不是一个可聚焦元件。我想我可以在快速链接HTML中添加一个隐藏的可聚焦元素,但那会很糟糕。
在试验例5我试图从目标元件除去的ID属性,与onhashchange事件重写片段标识符,并且然后恢复ID:
function cfl_hash(fragment){
// Get the section the fragment refers to.
var target = $(fragment);
// Save its current ID.
var id = target.attr("id");
// Remove the ID so the browser won't scroll.
target.attr("id","");
// Rewrite the hash to the desired fragment, only if onhashchange event supported.
if("onhashchange" in window){ location.hash = fragment; }
// Put the ID back in place.
target.attr("id", id);
}
$("#quicklinks-trigger").click(function(e){
$("#shadow").removeClass("default");
$("#shadow").addClass("active");
cfl_hash("#quicklinks");
});
其具有允许所述滚动的不快效果但阻止光标移动。我认为我在ID交换中有错误的事件序列;这应该起到抑制滚动的作用,尽管我怀疑它会允许光标移动。
真的很烦人,你不能取消滚动视力的用户,而不取消屏幕阅读器用户的光标重定向。
到目前为止,我只测试过Firefox和NVDA。我不知道如何在浏览器和屏幕阅读器的其他组合中发挥作用。
对此提出建议?