<input type="text" role="spinbutton" />
HTML / JavaScriptの要素を使用して、インクリメント/デクリメントの動作でアクセス可能な入力を実装するのに苦労しています。しかし、VoiceOverでは、予期しない方法で入力の値を変更するインクリメント/デクリメントのためのカスタム(偽?)入力イベントがあるようです。
ユーザーが支援技術を使用してページをナビゲートしているときに、ウィジェットを操作しようとしているときにVoiceOverから不適切なガイダンスを受け取らないようにするにはどうすればよいですか?
たとえば、次のような大幅に削減されたコードを使用します。
function logIt(...args) {
document.getElementById('output').appendChild(
document.createTextNode(`${args.join(', ')}\n`)
);
}
document.getElementById("myInput").addEventListener('input', (e) => {
debugger;
logIt(e.type, e.data, String(e));
e.target.setAttribute('aria-valuenow', e.target.value);
}, false);
document.getElementById("myInput").addEventListener('keydown', (e) => {
logIt(e.type, e.data, String(e));
}, false);
<input
id="myInput"
type="text"
role="spinbutton"
autocomplete="off"
defaultValue="1"
aria-valuenow="1"
aria-valuemin="0"
aria-valuemax="100"
/>
</div>
<pre id="output"></pre>
... VoiceOverは、入力を「ステッパー」として説明し、キーボードを使用してインクリメント/デクリメントする方法について説明します。しかし、これらのキーボードコマンドを使用すると、次のスクリーンキャップに示されているように、奇妙な計算が行われます。
(スクリーンキャップの「ロギング」から)ユーザーが入力を入力するInputEvent
とがトリガーさevent.type
れることも確認できますがinput
、VoiceOverキーボードコマンドを使用してインクリメント/デクリメントを行うと、ベースタイプEvent
がトリガーされ、event.type
再度設定されます。にinput
。
そして、これはの私の実装に固有のものではないようですrole="spinbutton"
。jQuery UIスピナーは、VoiceOverキーボードコマンドを使用してインクリメント/デクリメントするとうまく動作しません。
私はw3cの例をいくつか試してみましたrole="spinbutton"
:
- https://www.w3.org/TR/wai-aria-practices/examples/toolbar/toolbar.htmlのフォントサイズウィジェット
- https://www.w3.org/TR/wai-aria-practices/examples/spinbutton/datepicker-spinbuttons.htmlの日付ピッカー
...そして、VoiceOverはこれらの各UIコントロールを「ステッパー」として説明し、キーボードを使用してそれらをインクリメント/デクリメントする方法を指示しましたが、それらの指示は機能していないようです。その他のキーボードの動作は機能しましたが、VoiceOverが提案する動作は機能しません。
role="spinbutton"
VoiceOverのインクリメント/デクリメントキーボードコマンドでマークアップが正しく機能することを確認するにはどうすればよいですか?