2016-02-05 68 views
0

我試圖讓配音工作在safari上,但是,它似乎當我通過元素選項卡時,它並沒有在特定場景中讀出新輸入框的詠歎調標籤。safari OSX配音不讀詠歎調標籤的輸入

場景:

當Tab鍵到下一元素和對當前元素的模糊做一些事情的DOM,那麼它不會讀出下一個元素的詠歎調標籤。

下面是一個例子,如果你拿出的onblur功能,下面然後正常工作 http://plnkr.co/edit/x0c67oIl0wlQEguBIQVZ?p=preview

通知。

<input id="test" onblur="blurer()" onfocus="focuser()"/> 
+0

這是參考iOS還是OSX? – ChrisCM

+0

這是用於OSX –

回答

1

在這種情況下,這個問題是不是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)在很多情況下都能很好地工作。

+0

感謝您的答案,這也是我的 - 但是使用setTimeout會導致osx上的chrome無法與配音一起使用。 –

+0

無論如何,Chrom,OSX和VoiceOver不能很好地協同工作。不要浪費時間嘗試支持VoiceOver和Chrome。 – ChrisCM

相關問題