對於這種使用情況下,我想補充aria-live
和aria-atomic
屬性,例如代碼:
<select id="foo" aria-live="assertive" aria-atomic="true">
<option value="nw">Northwest</option>
<option value="ne">Northeast</option>
<option value="se">Southeast</option>
<option value="sw">Southwest</option>
</select>
我覺得assertive
對於aria-live
屬性權值,但polite
可能反而是適當的。 aria-atomic
屬性可以告訴瀏覽器/ AT在發生變化時該區域必須作爲整體呈現。您也可以考慮在初始選擇時使用aria-disabled: true
,然後在使用與狀態選擇關聯的值更新之前將其切換爲false
。
編輯
OK,我已經做了使用NVDA和IE9和Firefox 13.01一些測試。我目前沒有JAWS,所以如果有人可以用JAWS測試頁面,那將會很棒。
據我所知,VoiceOver不支持
aria
屬性
剛剛在10.7(Lion)上使用Chrome + Voiceover進行測試,Voiceover確實似乎支持aria-live
。
Test page available here。
我使用的模擬數據加載到選擇的地區一個簡單的腳本(使用對象):玩這個後
var options = [],
regions = {
'nw': 'Northwest',
'ne': 'Northeast',
'se': 'Southeast',
'sw': 'Southwest'
}
$(document).ready(function() {
$.each(regions, function(key, value) {
options.push('<option value="'+ key +'">'+ value +'</option>');
});
$('.block').on('change, focusout', '.states', function() {
$(this).parent().children('.regions')
.attr({'disabled': false, 'aria-disabled': false})
.html(options.join(''));
});
window.setTimeout(
function() {
$('#speak').text('assertive!');
},
3000
);
});
一些觀察了一下(我是當它涉及到屏幕肯定沒有專家讀者,所以如果我錯過了一些東西讓我知道)...
使用不建議在HTML disabled
屬性,你真的不希望加載該區域的數據,直到狀態選擇集中出來,因爲在t時關聯的區域選擇被禁用他在聚焦的時候會跳到下一個控件(你可以在下面的錄音中聽到這個)。奇怪的是,Firefox宣佈區域選擇的值,即使它沒有關注它。
我看到在polite
和assertive
之間的行爲沒有差異,或者在沒有aria-live
屬性的示例中,這種行爲沒有區別。我以爲FF13和IE9都支持aria-live
,但是從最後一個代碼($('#speak')...
)看來,IE9不是?
也許延遲模擬加載通過AJAX將是一件好事添加。
你可以聽錄音:IE9,Firefox 13
我會說禮貌是更好的。自信將開始閱讀你移動的那一刻。想象一下,如果你不得不選擇科羅拉多州,你是否希望首先聽到加利福尼亞州的全部? – 2012-07-05 21:36:14
我喜歡讓select最初被禁用的想法;但是會推薦使用常規禁用屬性,而不是詠歎調屬性:這樣做可以防止鼠標和鍵盤用戶在看到或未看到之前與其進行交互,而禁用Aria的功能僅對屏幕閱讀器用戶有用。 – BrendanMcK 2012-07-06 04:05:27
爲了以防萬一,如何使用兩者?我的意思是常規禁用屬性和aria-disabled屬性?它會防彈嗎? – 2012-07-06 11:42:17