If your questions are marked as headings, perhaps <h2>
, then it's very easy for the screen reader user to jump to each question using the 'H' or '2' quick navigation key. You shouldn't have to make each question a tab stop. You can also have a container around your groups of answers and have that container be aria-labelledby
pointing to the question text. Roughly something like this:
<h2 id='q1'>What is your quest?</h2>
<div aria-labelledby='q1'>
<input type='checkbox' id='q1a1'><label for='q1a1'>To seek the Holy Grail</label>
<input type='checkbox' id='q1a2'><label for='q1a2'>To search for killer rabbits</label>
</div>
<h2 id='q2'>What is your favorite color?</h2>
<div aria-labelledby='q2'>
<input type='checkbox' id='q2a1'><label for='q2a1'>Blue</label>
<input type='checkbox' id='q2a2'><label for='q2a2'>No, yellow</label>
</div>
This allows the user to tab to the checkbox, bypassing a tabstop for the question text itself, but the question will be read before the checkbox label is read because of the aria-labelledby
. Then tabbing to the next checkbox answer won't repeat the question. The nice thing about doing this is that if the user Shift+tabs back to the previous question, they'll hear the question read when they shift+tab to the last checkbox in the previous question (again, because of the aria-labelledby
).