我正在开发一个移动网页,用户可以点按一个按钮来切换默认情况下隐藏的内容的显示。这是一个简单的例子:
<div role="button" id="button1">Show Link 1</div>
<div style="display:none" id="div1">
<a href="#" id="link1">Link 1</a>
</div>
点击#button1我想显示隐藏的div,然后将焦点放在Link 1上。这是JQuery代码:
$(document).ready(function() {
$('#button1').click(function() {
$('#div1').show(function() {
$('#link1').focus();
})
});
});
一般来说这都有效。我添加了一个红色边框:使用CSS进行聚焦,因此我知道链接在可见后会获得焦点。但是,当链接获得焦点时,iOS上的VoiceOver不会宣布它。 VoiceOver的焦点仍然在按钮上。 (我在运行iOS 4.3.3的iPad和运行iOS 5.1.1的iPhone 4S上进行了测试)。
与上面的场景相反,如果获得焦点的元素与刚刚显示的元素相同,则一切正常,VoiceOver会宣布新聚焦的链接。以下是可行的方案示例:
<div role="button" id="button2">Show Link 2</div>
<div>
<a style="display:none" href="#" id="link2">Link 2</a>
</div>
$(document).ready(function() {
$('#button2').click(function() {
$('#link2').show().focus();
});
});
当该元素是刚刚可见的元素的子元素时,如何让VoiceOver宣布新聚焦的元素?
答案 0 :(得分:1)
一般情况下都可以。
如果这意味着“有时候它会起作用,有时使用相同的代码就行不通”,这让我相信存在时间问题。链接是屏幕外的还是动画的?尝试在最后一次回调中添加1秒超时,看看是否得到不同的结果。 任何过渡动画完成后,您都希望移动焦点。
一般情况下都可以。
如果这意味着“某些代码可以正常运行(100%的时间)和其他类似的代码不起作用(100%的时间),”你需要在bugreport.apple.com上提交一个错误。
在这两种情况下,如果您发布了可以测试问题场景的URL,也会有所帮助。