Tăng thêm một `vai trò = quay spinbutton 'với Voiceover


8

Tôi đang vật lộn để thực hiện một đầu vào có thể truy cập bằng các hành vi tăng / giảm, sử dụng một <input type="text" role="spinbutton" />yếu tố trong HTML / JavaScript. Nhưng có vẻ như với VoiceOver có các sự kiện đầu vào tùy chỉnh (giả?) Để tăng / giảm làm thay đổi giá trị của đầu vào theo những cách không mong muốn.

Làm cách nào để đảm bảo người dùng điều hướng trang bằng công nghệ hỗ trợ không nhận được hướng dẫn xấu từ VoiceOver trong khi cố gắng tương tác với tiện ích của tôi?

Ví dụ: sử dụng mã siêu rút gọn như thế này:

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 sẽ mô tả đầu vào dưới dạng "bước" và đưa ra hướng dẫn về cách tăng / giảm bằng bàn phím. Nhưng việc sử dụng các lệnh bàn phím đó dẫn đến một số phép toán kỳ lạ, như đã thấy trong nắp màn hình này:

chụp màn hình hoạt hình các nỗ lực tăng dần bằng bàn phím VoiceOver

Bạn cũng có thể nhìn thấy (từ "khai thác gỗ" trong nắp màn hình) mà khi người dùng nhập vào, một InputEventđược kích hoạt với event.typeviệc input- nhưng khi lệnh bàn phím VoiceOver cho tăng / giảm được sử dụng, cơ sở-type Eventđược kích hoạt với event.typemột lần nữa thiết lập để input.

Và điều này dường như không phải là duy nhất đối với việc triển khai của tôi role="spinbutton". Trình tạo giao diện người dùng jQuery không hoạt động tốt khi tăng / giảm bằng các lệnh bàn phím VoiceOver:

Ảnh chụp màn hình hoạt hình của spinner UI UI được tăng lên bằng VoiceOver và giá trị thay đổi thành một số ký hiệu khoa học bất ngờ

Tôi thậm chí đã thử một số ví dụ của w3c cho role="spinbutton":

... và mặc dù VoiceOver đã mô tả từng điều khiển UI đó là "bước" và đưa ra hướng dẫn về cách tăng / giảm chúng bằng bàn phím, những hướng dẫn đó dường như không hoạt động. Các hành vi bàn phím khác đã hoạt động - nhưng những hành động mà VoiceOver đề xuất là không.

Tôi có thể làm gì để đảm bảo rằng role="spinbutton"đánh dấu hoạt động chính xác với các lệnh bàn phím tăng / giảm của VoiceOver?

Câu trả lời:


5

Tôi không tin role="spinbutton"là tương thích với VoiceOver vì dường như VoiceOver chiếm quyền điều khiển các sự kiện phím tắt khi sử dụng con trỏ VoiceOver. Vì vậy, khi tập trung vào một phần tử với role="spinbutton"VoiceOver sẽ hướng dẫn người dùng sử dụng "Control-Option DownArrow" hoặc "Control-Option UpArrow" để giảm hoặc tăng giá trị. Khi các phím đó được nhấn, sự kiện sẽ không được xử lý cho bất kỳ trình xử lý sự kiện JavaScript keyDown nào, vì vậy chúng tôi không thể phát hiện ra rằng các khóa đó đã được nhấn và không thể thực hiện việc tăng hoặc giảm giá trị thực tế. Vì vậy, tôi không chắc có cách nào để sử dụng role="spinbutton"và làm cho nó hoạt động với VoiceOver. Người dùng sẽ được cung cấp các hướng dẫn không hoạt động và sẽ gây nhầm lẫn.

Như một giải pháp thay thế cho một ứng dụng mà tôi đang làm việc, tôi đã thực hiện hành vi xử lý chính được mô tả trong thực tiễn tác giả WAI ARIA cho spinbutton nhưng tôi chưa thêm role="spinbutton"hoặc các thuộc tính aria khác được liệt kê. Thay vào đó, tôi đã thêm aria-live="assertive"để khi thay đổi giá trị bằng bàn phím hoặc nhấp vào nút tăng / giảm, người dùng sẽ nghe thấy giá trị mới. Ngoài ra, tôi đã thêm một số văn bản ẩn trực quan hướng dẫn người dùng về cách tăng / giảm giá trị với bàn phím và liên kết với việc sử dụng đầu vào aria-describedby.


0

Tôi vừa truy cập ví dụ spinbutton của w3 và dường như bàn phím có thể hoạt động được trong VoiceOver Mac (Phiên bản HĐH 10.15.1 với Safari). Bạn có thể kiểm tra mã họ đã sử dụng và lấy cảm hứng từ đó.

Tuy nhiên, ví dụ spinbutton w3 không thông báo giá trị hiện tại khi bước được nhận trọng tâm hoặc thay đổi khi bạn bước lên và xuống . Tôi đã thử cài đặt mức độ trung bình và cao không có may mắn.

Việc không công bố giá trị này (hoặc có thể aria-valuetexthoặc aria-valuenowcả hai) dường như là một lỗi về phía Apple, vì vậy tôi chỉ báo cáo về nó. Nắm bắt tốt.

Điều này có thể có thể bị hack với một khu vực sống ở aria, nhưng bạn có thể kết thúc bằng các thông báo trùng lặp trên các kết hợp trình duyệt / trình đọc màn hình khác.


Bạn đã sử dụng "Control-Option UpArrow" như VoiceOver đã hướng dẫn hay chỉ cần mũi tên lên và mũi tên xuống?
Richard JP Le Guen

Đúng. Tôi đã thử cả hai (trong trường hợp của tôi, tôi sử dụng caps-lock làm khóa VO, thay vì tùy chọn Ctrl). Bên cạnh đó, tài liệu thiết kế spinbutton khá rõ ràng - mũi tên lên và xuống sẽ tự hoạt động nếu nút xoay nằm trong tiêu điểm.
brennanyoung
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.