Quando si apre una finestra di dialogo modale utilizzando l'interfaccia utente di jQuery, si noterà che se si utilizza il tasto Tab, è possibile concentrarsi sui pulsanti della finestra di dialogo, ma tutti gli input esterni alla finestra di dialogo vengono ignorati. Sto cercando di ottenere lo stesso comportamento con jQuery UI Tools Overlay, ma non sono sicuro di come jQuery UI lo sta facendo. Non sembra che l'indice della tabulazione degli elementi sia impostato su -1, e inoltre, fare ciò sarebbe estremamente noioso poiché implicherebbe la ricerca di tutti gli elementi focalizzabili che non fanno parte della finestra di dialogo. Questo non sarebbe molto buono se hai bisogno di automazione. C'è un modo per disabilitare la messa a fuoco di tutti gli elementi della pagina tranne alcuni?In che modo la finestra di dialogo dell'interfaccia utente jQuery disattiva la messa a fuoco sugli input in background?
risposta
la finestra di widget di effettivamente gestisce l'evento keypress
ed esegue il proprio Tab di elaborazione dei tasti. Questa elaborazione ignora gli elementi tabbable al di fuori della finestra di dialogo.
il codice sorgente relativo (linee 286 a 305 nel current version at the time of this post) è:
// 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;
}
});
}
Si noti che il commento di TrueBlueAussie è giusto, e che il rilascio del widget finestra di dialogo utilizzata per legare alla manifestazione sbagliata. keydown
dovrebbe essere usato al posto di keypress
:
uiDialog.bind('keydown.ui-dialog', function(event) {
// ...
});
Ecco il pezzo di codice che gestisce questo:
// 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;
}
}
});
Sembra jQuery UI aggiunge un filtro (:tabbable
) al motore di selezione jQuery e quando il la finestra di dialogo è attiva, consente solo alla scheda di scorrere tra gli elmenti tabbable della modale.
Codice da: https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.dialog.js
Ad oggi 'keydown' è corretto. La risposta di 'Frédéric Hamidi' utilizza' keypress' e non si innesca per la chiave 'tab'. +1 –
- 1. Rimuovere la messa a fuoco programmaticamente?
- 2. Messa a fuoco permanente per la finestra degli strumenti
- 3. jQuery perde l'evento di messa a fuoco
- 4. jQuery Messa a fuoco dell'ingresso non funzionante
- 5. come catturare la finestra di input momento perso messa a fuoco?
- 6. Come impostare la messa a fuoco automatica solo in xaml?
- 7. Come disabilitare la messa a fuoco immediata in TextInputLayout?
- 8. Come rendere modale la finestra di dialogo di jQuery?
- 9. La finestra di dialogo dell'interfaccia utente jQuery si comporta in modo imprevedibile
- 10. Come delegare l'evento di messa a fuoco?
- 11. Finestra di dialogo dell'interfaccia utente JQuery lenta
- 12. Pulsante di messa a fuoco predefinita di JavaFX nella finestra di dialogo degli avvisi
- 13. Windows.h - Notifica quando la messa a fuoco immette un input di testo
- 14. Crea osservatore di eventi per la messa a fuoco?
- 15. Blocco del contenuto dello sfondo e messa a fuoco sulla finestra di dialogo modale
- 16. Disabilita la messa a fuoco automatica della webcam in Linux
- 17. Impedire la messa a fuoco delle finestre Python
- 18. La visualizzazione di ri-rendering fa sì che l'input perda la messa a fuoco
- 19. Spy ++ e Windows chiusi quando perdono la messa a fuoco
- 20. Messa a fuoco NSA accessorio accessorio
- 21. Come posso aprire una finestra NSW e avere la finestra selezionata e messa a fuoco?
- 22. problema con la finestra di dialogo jquery
- 23. Messa a fuoco della tastiera e messa a fuoco logica in WPF
- 24. AngularJS: perdita di messa a fuoco forzata
- 25. Carica automaticamente la finestra di dialogo in jQuery Mobile?
- 26. Messa a fuoco manuale in camera2, android
- 27. Determinazione della messa a fuoco in SWT
- 28. Come salvare automaticamente in Vim 7 quando la messa a fuoco viene persa dalla finestra?
- 29. Messa a fuoco ContentEditable in Chrome/Safari
- 30. verificare se un campo di input è messa a fuoco in vaniglia JavaScript
Ah, sì, sembra un po 'difficile da emulare, ma questo è quello che stavo cercando. Grazie – JayPea
Nota: se si trattava di una copia mancante, o la fonte che hai citato era diversa dalla risposta di j08691 dalla stessa data, ma per eseguire questa operazione, la chiave di comando richiede 'keydown', non' keypress'. 'keypress' è troppo tardi (o non si attiva affatto per la scheda). –
@TrueBlueAussie, che sicuramente non era un errore (ho rintracciato la fonte originale [lì] (https://github.com/jquery/jquery-ui/blob/1.8/ui/jquery.ui.dialog.js)), ma potrei avere un bug incollato sulla copia, sì :) Sistemerò il collegamento e il bug. –