Utilice focusout
für die Zugänglichkeit
Es gibt hier eine Antwort, die (ganz richtig) besagt, dass die Konzentration auf click
Ereignisse sind ein Problem für die Zugänglichkeit, da wir die Tastaturbenutzer berücksichtigen wollen. Die Website focusout
Ereignis ist das Richtige, um hier zu verwenden, aber es kann viel einfacher als in der anderen Antwort (und in reinem Javascript auch) getan werden:
Eine einfachere Art, dies zu tun:
Das "Problem" bei der Verwendung von focusout
ist, dass, wenn ein Element in Ihrem Dialog/Modal/Menü den Fokus verliert, um etwas auch "innerhalb" das Ereignis noch ausgelöst wird. Wir können überprüfen, dass dies nicht der Fall ist, indem wir uns Folgendes ansehen event.relatedTarget
(was uns sagt, welches Element den Fokus erhalten hat).
dialog = document.getElementById("dialogElement")
dialog.addEventListener("focusout", function (event) {
if (
// we are still inside the dialog so don't close
dialog.contains(event.relatedTarget) ||
// we have switched to another tab so probably don't want to close
!document.hasFocus()
) {
return;
}
dialog.close(); // or whatever logic you want to use to close
});
Es gibt einen kleinen Haken an der Sache, nämlich dass relatedTarget
können sein null
. Dies ist in Ordnung, wenn der Benutzer außerhalb des Dialogs klickt, aber es wird ein Problem sein, wenn der Benutzer innerhalb des Dialogs klickt und der Dialog nicht fokussierbar ist. Um dies zu beheben, müssen Sie sicherstellen, dass Sie tabIndex=0
damit Ihr Dialog fokussierbar ist.