Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
屏幕阅读器和JavaScript焦点事件的可访问性?_Javascript_Accessibility_Screen Readers - Fatal编程技术网

屏幕阅读器和JavaScript焦点事件的可访问性?

屏幕阅读器和JavaScript焦点事件的可访问性?,javascript,accessibility,screen-readers,Javascript,Accessibility,Screen Readers,我有一个表单,当输入有效文本时,它有一些JavaScript可以前进到下一个字段(下面的示例)。我的问题是屏幕阅读器如何处理这个问题。这会让读者感到困惑,还是会检测到焦点的变化并向用户读出新字段 HTML <form action="/some/action" method="post" role="form"> <legend>A Form</legend> <label for="first_number">First Numb

我有一个表单,当输入有效文本时,它有一些JavaScript可以前进到下一个字段(下面的示例)。我的问题是屏幕阅读器如何处理这个问题。这会让读者感到困惑,还是会检测到焦点的变化并向用户读出新字段

HTML

<form action="/some/action" method="post" role="form">
    <legend>A Form</legend>
    <label for="first_number">First Number</label>
    <input id="first_number" name="first_number" required type="text" value="">
    <label for="second_number">Second Number</label>
    <input id="second_number" name="second_number" required type="text" value="">
    <button type="submit">Submit</button>
</form>

因此,在用户在第一个字段中输入三位数字后,第二个字段将调用focus方法

我认为这里的问题是意外行为。对于没有视力的用户来说,任何非标准的行为都可能造成混乱,因为它的工作原理与其他网站不同

另外,这是你在每个领域都拥有的功能,还是只是其中的一部分?如果您有多个具有不同行为的字段,这将特别令人困惑

几年前,关于这一点有一个非常好的线索,有几个比我知识渊博的人提供了信息。


您需要单击每页底部的“下一条消息”链接来读取线程中的所有消息。

据我所知,当
.focus()
发生时,它们都会进行回调并基本上运行
document.activeElement
,因此通过运行
.focus()
(作为a11y标准)没有必要使用aria atomic或其他live change内容,因为他们已经将其用作活动元素指示器,无论何时通过选项卡调用它,或者通过
.focus()
手动调用它,但作为注释保留,因为我对所有屏幕阅读器都不是100%肯定。谢谢,这个链接很有帮助,也让我想到了其他可访问性问题。特别是流动性问题。虽然与屏幕阅读器无关,但有移动性问题的用户错误按键使用auto tab会变得更加困难。就屏幕阅读器而言,我仍然觉得自己处于黑暗之中。文档非常稀少,而且实际用户对屏幕阅读器体验的信息也很少。您可以使用几个免费的屏幕阅读器。我建议将NVDA与FireFox或IE结合使用。如果你在Mac上,VoiceOver也是一个非常好的免费工具。
(function (document, window) {
    function getFocusCallback(current_focus, go) {
        var check = document.getElementById(current_focus);
        var el = document.getElementById(go);
        var pat = new RegExp('^\\d{3}$');
        return function callback() {
            if (pat.test(check.value)) {
                el.focus();
            }
        };
    }

    document.getElementById('first_number').addEventListener('input', getFocusCallback('first_number', 'second_number'));
})(document, window);