Wenn Sie einen modalen Dialog mit jQuery UI öffnen, werden Sie feststellen, dass Sie bei Verwendung der Tab-Taste auf die Schaltflächen des Dialogfelds fokussieren können, aber alle Eingaben außerhalb des Dialogs ignoriert werden. Ich versuche, das gleiche Verhalten mit jQuery UI Tools Overlay zu erreichen, aber ich bin nicht sicher, wie jQuery UI es tut. Es scheint nicht den Registerindex der Elemente auf -1 zu setzen, und außerdem wäre dies extrem mühsam, da es alle focusierbaren Elemente finden würde, die nicht Teil des Dialogs sind. Dies wäre nicht sehr gut, wenn Sie eine Automatisierung benötigen. Gibt es eine Möglichkeit, alle Elemente der Seite außer einigen wenigen zu deaktivieren?Wie deaktiviert jQuery UI Dialog den Fokus auf Hintergrundeingaben?
Antwort
Das Dialog-Widget behandelt tatsächlich das keypress
Ereignis und führt seine eigene Tab Schlüsselverarbeitung aus. Diese Verarbeitung ignoriert Tabable-Elemente außerhalb des Dialogs.
Der entsprechende Quellcode (Zeilen 286 bis 305 in den current version at the time of this post) ist:
// prevent tabbing out of modal dialogs
if (options.modal) {
uiDialog.bind('keypress.ui-dialog', function(event) {
if (event.keyCode !== $.ui.keyCode.TAB) {
return;
}
var tabbables = $(':tabbable', this),
first = tabbables.filter(':first'),
last = tabbables.filter(':last');
if (event.target === last[0] && !event.shiftKey) {
first.focus(1);
return false;
} else if (event.target === first[0] && event.shiftKey) {
last.focus(1);
return false;
}
});
}
Beachten Sie, dass TrueBlueAussie Kommentar richtig ist, und dass die Freigabe des Dialogs Widget an dem falschen Ereignis zu binden, verwendet. keydown
sollte statt keypress
verwendet werden:
uiDialog.bind('keydown.ui-dialog', function(event) {
// ...
});
Hier ist der Teil des Codes, der diese Griffe:
// prevent tabbing out of modal dialogs
this._on(uiDialog, {
keydown: function(event) {
if (!options.modal || event.keyCode !== $.ui.keyCode.TAB) {
return;
}
var tabbables = $(":tabbable", uiDialog),
first = tabbables.filter(":first"),
last = tabbables.filter(":last");
if (event.target === last[0] && !event.shiftKey) {
first.focus(1);
return false;
} else if (event.target === first[0] && event.shiftKey) {
last.focus(1);
return false;
}
}
});
Es ist wie jQuery UI sieht fügt einen Filter (:tabbable
) an den Selektor-Engine jQuery und wenn die Dialog ist aktiv, es erlaubt nur die Registerkarte zwischen den modal Tables Elmente zu wechseln.
-Code ab: https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.dialog.js
Ab heute ist "Keydown" korrekt. Die Antwort von 'Frédéric Hamidi' verwendet' keypress' und löst nicht für die 'tab'-Taste aus. +1 –
- 1. jQuery UI Dialog und Textfeld Fokus Issue
- 2. jQuery UI Dialog + ASP.NET area per + Fokus
- 3. jQuery UI-Fokus Ausgabe
- 4. jQuery UI Dialogschaltfläche Fokus
- 5. jQuery UI Dialog Tasten
- 6. Transparente jQuery UI Dialog
- 7. jQuery UI Dialog OnBeforeUnload
- 8. JQuery UI Dialog langsam
- 9. jQuery-UI Dialog Speicherlecks
- 10. jQuery UI Dialog Overlay
- 11. jQuery UI Akkordeon Fokus auf geöffnete Artikel
- 12. Jquery Autocomplete und jQuery UI Dialog
- 13. jQuery UI-Dialog auf Redimensionierung schrumpft den Inhalt des Dialogs
- 14. Redirect jquery ui Dialog auf schließen
- 15. jquery Ui-dialog und ie8
- 16. jQuery UI-Dialog Titelleiste Problem
- 17. Positionierung jQuery UI Dialog nebeneinander
- 18. Jquery ui Dialog Modal True
- 19. Wie man den jQuery UI-Dialog nicht veränderbar macht
- 20. jQuery UI Dialog onClick Ereignis
- 21. Jquery UI deaktiviert dynamische Registerkarten
- 22. Problem mit Jquery UI Dialog
- 23. Wie deaktiviert man den Fokus für die erste Eingabe in einem Primefaces-Dialog?
- 24. datepicker in JQuery UI Dialog zeigt Kalender im Dialog geöffnet
- 25. Wie macht man den jQuery-Dialog modal?
- 26. Kann jQuery UI modalen Dialog nicht modal
- 27. jquery Funktion in jquery-ui Dialog
- 28. jQuery UI: Schaltfläche öffnet Dialog/Schaltfläche ändert nicht den Status
- 29. JQuery UI Dialog iFrame Inhalt leer
- 30. Drucken Dialog Fokus Ausgabe
Ah ja, sieht es ein bisschen schwer zu emulieren, aber das ist das, was ich suchte. Danke, – JayPea
Beachten Sie, ob das eine Fehlkopie war, oder die Quelle, die Sie angaben, war anders als die Antwort von j08691 vom selben Datum, aber um diese Tab-Tasten-Behandlung zu machen, braucht man 'keydown', nicht' keypress'. 'Tastendruck' ist zu spät (oder feuert überhaupt nicht für Tab). –
@TrueBlueAussie, das war definitiv keine Fehlkopie (Ich habe die Originalquelle [dort] aufgespürt (https://github.com/jquery/jquery-ui/blob/1.8/ui/jquery.ui.dialog.js)), aber ich habe vielleicht einen Fehler kopiert, ja :) Ich werde den Link und den Fehler beheben. –