Mein Interaktionsprozess Benutzer ist wie folgt:Wie erstellt man Screenreader Accessible AJAX Regionen und DOM Updates einfügen/entfernen?
- Der Benutzer mit einer Dropdown-Liste angezeigt wird, eine Liste der Städte
- Nach einer Stadt Auswahl, ein AJAX-Request erhält alle Gebäude in der Stadt enthält, und fügt sie in ein div ein (diese AJAX-Anforderung gibt eine Liste von Kontrollkästchen zurück)
- Der Benutzer kann dann ein Kontrollkästchen aktivieren/deaktivieren, um die Stadt zu einer Tabelle hinzuzufügen, die sich auf derselben Seite befindet. (Diese dynamisch fügt/entfernt Zeilen Tabelle)
Hier ist mein dropdown:
<label for="city-selector">Choose your favorite city?</label>
<select name="select" size="1" id="city-selector" aria-controls="city-info">
<option value="1">Amsterdam</option>
<option value="2">Buenos Aires</option>
<option value="3">Delhi</option>
<option value="4">Hong Kong</option>
<option value="5">London</option>
<option value="6">Los Angeles</option>
<option value="7">Moscow</option>
<option value="8">Mumbai</option>
<option value="9">New York</option>
<option value="10">Sao Paulo</option>
<option value="11">Tokyo</option>
</select>
Hier ist die Ajax-div, das Leergut/bevölkert wird:
<div role="region" id="city-info" aria-live="polite">
<!-- AJAX CONTENT LOADED HERE -->
</div>
Hier Die Checkbox-Liste, die in das Ajax-Div gesetzt wird:
<fieldset id="building-selector" aria-controls="building-table">
<legend>Select your favorite building:</legend>
<input id="fox-plaza" type="checkbox" name="buildings" value="fox-plaza">
<label for="fox-plaza">Fox Plaza</label><br>
<input id="chrysler-building" type="checkbox" name="buildings" value="chrysler-building">
<label for="chrysler-building">Chrysler Building</label><br>
<input id="empire-state-building" type="checkbox" name="buildings" value="empire-state-building">
<label for="empire-state-building">Empire State Building</label><br>
</fieldset>
Und schließlich die Tabelle, die die Städte hält, dass er Benutzer fügt/entfernt
<table id="building-table" aria-live="polite">
<caption>List of buildings you have selected</caption>
<tr>
<th scope="col">Building name</th>
<th scope="col">Delete Building</th>
</tr>
<tr>
<td>Empire State Building</td>
<td><button>Delete</button> /td>
</tr>
</table>
Ich dachte, ich auf dem richtigen Weg war aria-Kontrollen durch die Verwendung = „“ und Arie-live = „“, aber das scheint nicht genug zu sein, damit der Bildschirmleser die Änderungen erkennen kann. Tatsächlich weiß ich nicht, ob etwas in meinem Markup fehlt oder ob ich Alert-Ereignisse oder ähnliches auslösen muss, damit dies funktioniert.
Haben Sie ein funktionierendes Beispiel für eine URL, die wir überprüfen können? Meine erste Reaktion ist, dass ich zwei 'Aria-Live'-Regionen sehe und diese Dinge abwerfen kann, aber ohne eine Seite im vollen Kontext ist dies nicht einfach zu debuggen. – aardrian
Sind zwei lebende Bereiche ein Anti-Pattern? Ich werde daran arbeiten, ein Live-Beispiel hinzuzufügen. Ich muss einige gefälschte Ajax-Anrufe erstellen. – Amir
Es kann problematisch sein, muss aber im Kontext sehen: "Wenn mehr als ein Bereich einer Seite aktualisiert wird, können Bildschirmleser den Typ der Aktualisierung, die auftritt, nicht feststellen, welche Priorität ein Bereich bei der Ankündigung gegenüber einem anderen hat Warnungen an den Benutzer, und ob der gesamte Bereich oder nur ein Teil davon angekündigt werden sollte. "[Quelle] (https://www.webaccessibility.com/best_practices.php?technology_platform_id=121) – aardrian