Ich benutze reagieren und reagieren-modal, um ein Overlay über eine Website zu erstellen. Dieses Overlay enthält verschiedene Elemente und auch ein Formular (Übersicht unten). Ich möchte in der Lage sein, den Benutzer mithilfe von TAB-Tasten durch das Formular zu führen. Ich habe tabindex=0
den erforderlichen Elementen zugewiesen, um in der Reihenfolge ihres Auftretens tabellarisch dargestellt zu werden.Tabindex funktioniert nicht in Chrome (React App)
Mein Problem ist: Es funktioniert nicht in Chrome (Version 61.0.3163.100), während es in Firefox funktioniert. Ich habe gelesen, dass dies passiert, wenn ein Element im DOM-Baum unsichtbar ist oder eine Höhe/Breite von 0 hat. Ich habe einige Styling-Änderungen vorgenommen, um das zu beheben, aber ohne Wirkung.
<div class="ReactModalPortal">
<div data-reactroot="" class="ReactModal__Overlay" style="position: fixed; top: 0px; left: 0px; right: 0px; bottom: 0px;">
<div class="ReactModal__Content" tabindex="-1" aria-label="Questionnaire" style="position: absolute; top: 0px; left: 0px; right: 0px; height: 100%; background: transparent none repeat scroll 0% 0%; overflow: auto;">
<!-- Some other stuff and nested elements -->
<div id="...">
<form>
<input tabindex="0">
<button tabindex="0">
</form>
</div>
</div>
</div>
Wie Sie eine der übergeordneten Elemente hat tabindex="-1"
sehen können. Wenn das Problem durch die inspect-Funktion in Chrome oder programmgesteuert mit JS geändert wird, bleibt das Problem bestehen (oder ist es ein Unterschied, ob das Element ursprünglich mit diesem Index gerendert wurde?).
aktualisieren
Ich erkannte, dass etwas anderes die Probleme verursachte. Ich benutzte das CSS-Attribut initial: all
auf dem Wurzelknoten meines Modals, um mein inneres CSS von allem außerhalb zu umgrenzen. Aus irgendeinem Grund verhinderte dies, dass der Tabindex funktioniert. Wenn Sie mir helfen können, zu verstehen, werde ich dies die Prämie belohnen. Mein Workaround verwendet einfach nicht all: initial
(es ist sowieso nicht IE-kompatibel, aber es gibt auch keine wirklich gute Alternative, die mir bekannt ist).
Elemente wie Eingabe, Schaltfläche usw. sind standardmäßig fokussierbar. Sie müssen 'tabindex' nicht angeben. –
Vielen Dank für den Hinweis. Ich bin mir bewusst, dass dies nicht erforderlich ist, aber mein Problem ist, dass es nicht funktioniert. Im Allgemeinen funktioniert das Tabbing nicht. Der Tabindex war ein Versuch, es zu erzwingen, aber es half nicht. – Gegenwind
Ich benutze Chrome 62 und es funktioniert für mich https://codesandbox.io/s/qzoz5mqxx9 –