我想創建一個可訪問的網頁,其中包含許多可以在用戶與頁面交互時隱藏和顯示的組件。當顯示一個組件時,我希望屏幕閱讀器(在這種情況下是NVDA)讀取組件的內容。如何讓屏幕閱讀器能夠響應在動態Web應用程序中顯示和隱藏內容?
作爲一個例子:
<html>
<body>
\t <div id="comp1" style="display:none;" role="region" tabindex="-1" aria-expanded="false">
\t \t <div>This is component 1</div> \t
\t \t <button type="button" onclick="ShowComponent(comp2)">Show 2</button> \t
\t </div>
\t <div id="comp2" style="display:none;" role="region" tabindex="-1" aria-expanded="false">
\t \t <div>This is component 2</div>
\t \t <button type="button" onclick="ShowComponent(comp1)">Show 1</button>
\t </div>
\t <script type="text/javascript">
\t \t function HideAll() { \t \t
\t \t \t // hide both components
\t \t \t var comp1 = document.getElementById("comp1");
\t \t \t comp1.style.display = "none";
\t \t \t comp1.setAttribute("aria-expanded", "false");
\t \t \t
\t \t \t var comp2 = document.getElementById("comp2");
\t \t \t comp2.style.display = "none";
\t \t \t comp2.setAttribute("aria-expanded", "false");
\t \t }
\t \t
\t \t function ShowComponent(comp) {
\t \t \t HideAll();
\t \t \t
\t \t \t // show this component
\t \t \t comp.style.display = "block";
\t \t \t comp.setAttribute("aria-expanded", "true");
\t \t \t comp.focus(); \t \t \t
\t \t } \t
\t \t
\t \t ShowComponent(document.getElementById("comp1"));
\t </script>
</body>
</html>
在上述例子中點擊部件1內的按鈕將隱藏部件1和顯示部件2
部件2內點擊一個按鈕將隱藏組件2並顯示組件1.
但是NVDA似乎不會讀取t他在組件之間切換時的內容。有沒有辦法可以實現這一點?
Please see this Gist on GitHub to check using NVDA
感謝您的回覆。在我的組件周圍添加一個活動區域解決了我的問題,NVDA現在可以按預期做出反應。 我之前曾嘗試將aria-live屬性放在組件本身上,但沒有成功。看來,我遇到的主要問題是我的活動區域的範圍! –
是的,這是一個常見問題。知道要包裝什麼是巨大的,然後知道在用戶測試之前,多麼積極(自信與禮貌)以及細節(原子)如何變得棘手。祝你好運! – aardrian