在這種情況下,這個問題是不是blurer
的存在,而是你的blurer
和相應focuser
職能的內容。這兩個函數一起切換附近元素的隱藏狀態。這是公告的中介。還有一個角色公告也會發生。全annoucement(當文本在編輯文本控件填充)應爲:
"The edited text" contents selected/unselected, "your aria label", edit text.
引述的部分是可以控制的部分,其他部分是部分通過與它的OS /旁白的交互控制,通過自動計算控制狀態和其他詠歎調值。
我們得到這一消息僅僅是
"The edited text"
因此,它不能與ARIA標籤明確的問題。但是,您正在導致元素的整個通知被中斷。
當您的模糊和對焦功能觸發您使用VoiceOver的響應(或操作系統的通信)這些事件。不知道你的功能是怎麼造成的。無論如何,在這些情況下有助於在代碼中添加setTimeout。通過分離你的函數和實際的焦點/模糊事件,你可以允許可訪問性的API做他們的事情,然後用頁面上的樣式等等。這是一個讓你的小代碼片段工作的例子。只是這個替換您的JavaScript文件的內容:
function blurer(){
window.setTimeout(function() {
document.getElementById('myDiv').style.display = 'none';//
}, 0);
}
function focuser(){
window.setTimeout(function() {
document.getElementById('myDiv').style.display = 'block';//
}, 0);
}
一般來說,我喜歡以避免下一個定時器,因爲他們創造的競爭條件。但是,setTimeouts爲0是可以接受的,因爲沒有競爭條件。您只需將代碼推送到隊列的末尾,就可以解除觸發事件和代碼的執行。在對VoiceOver進行黑客入侵時,setTimeout(someFunction,0)在很多情況下都能很好地工作。
這是參考iOS還是OSX? – ChrisCM
這是用於OSX –