Ich habe ein jQuery UI-Dialogfeld mit einem Formular. Ich möchte einen Klick auf eine der Schaltflächen des Dialogfelds simulieren, damit Sie nicht die Maus oder die Registerkarte verwenden müssen. Mit anderen Worten, ich möchte, dass es sich wie ein normales GUI-Dialogfeld verhält, in dem das Drücken der Schaltfläche "OK" simuliert wird.
Ich gehe davon aus, dass dies eine einfache Option für das Dialogfeld ist, finde sie jedoch nicht in der Dokumentation zur jQuery-Benutzeroberfläche . Ich konnte jede Formulareingabe mit keyup () binden, wusste aber nicht, ob es einen einfacheren / saubereren Weg gibt. Vielen Dank.
Antworten:
Ich weiß nicht, ob das jQuery-UI-Widget eine Option enthält , aber Sie können das
keypress
Ereignis einfach an das div binden , das Ihren Dialog enthält ...Dies wird unabhängig davon ausgeführt, welches Element den Fokus in Ihrem Dialogfeld hat. Dies kann je nach Wunsch eine gute Sache sein oder auch nicht.
Wenn Sie dies zur Standardfunktionalität machen möchten, können Sie diesen Code hinzufügen:
Hier ist eine detailliertere Ansicht, wie es aussehen würde:
quelle
Ich habe die obigen Antworten zusammengefasst und wichtige Dinge hinzugefügt
Vorteile:
textarea
,select
,button
oder Eingaben mit Typ - Taste, stellen Sie auf Benutzer klicken eingebentextarea
und das Formular anstatt sich neue Zeile vorgelegt bekommen!$(document).ready
document
jeden Dialog und bindet ihn nicht wie in einigen Codes oben an jeden Dialog, um die Effizienz zu erhöhen$('<div><input type="text"/></div>').dialog({buttons: .});
:first
Nachteile:
eq()
oder eine Funktion in der if-Anweisung aufrufen'.ui-dialog'
Ich weiß, dass die Frage alt ist, aber ich hatte das gleiche Bedürfnis, also teilte ich die Lösung, die ich verwendet habe.
quelle
.delegate()
sie in jQuery 3.0 veraltet war. Daher ist.on()
(verfügbar seit 1.7) wahrscheinlich der richtige Weg zu diesem Zeitpunkt.Es funktioniert wunderbar mit der neuesten Version von JQuery UI (1.8.1). Sie können auch: first anstelle von: last verwenden, je nachdem, welche Schaltfläche Sie als Standard festlegen möchten.
Diese Lösung hat im Vergleich zu der oben ausgewählten den Vorteil, dass angezeigt wird, welche Schaltfläche die Standardschaltfläche für den Benutzer ist. Der Benutzer kann auch zwischen den Schaltflächen tippen und durch Drücken der EINGABETASTE auf die aktuell fokussierte Schaltfläche klicken.
Prost.
quelle
Ein grober, aber effektiver Weg, um diese Arbeit allgemeiner zu gestalten:
Wenn Sie dann einen neuen Dialog erstellen, können Sie Folgendes tun:
Und verwenden Sie es danach wie einen normalen Abfragedialog:
Es gibt Möglichkeiten, dies zu verbessern, damit es in besonderen Fällen funktioniert. Mit dem obigen Code wird automatisch die erste Schaltfläche im Dialogfeld als Schaltfläche ausgewählt, die ausgelöst wird, wenn die Eingabetaste gedrückt wird. Außerdem wird davon ausgegangen, dass zu einem bestimmten Zeitpunkt nur ein aktiver Dialog vorhanden ist, was möglicherweise nicht der Fall ist. Aber du kommst auf die Idee.
Hinweis: Wie oben erwähnt, hängt die Taste, die bei der Eingabe gedrückt wird, von Ihrem Setup ab. In einigen Fällen möchten Sie also den: first-Selektor in der .find-Methode verwenden, in anderen möchten Sie möglicherweise den: last-Selektor verwenden.
quelle
Anstatt auf Schlüsselcodes wie in dieser Antwort zu achten (die ich nicht bearbeiten konnte), können Sie sich im Dialogfeld an das Übermittlungsereignis des Formulars binden und dann Folgendes tun:
Das Ganze würde also so aussehen
Beachten Sie, dass verschiedene Browser die Eingabetaste unterschiedlich behandeln und einige bei der Eingabe nicht immer eine Übermittlung durchführen.
quelle
Ben Clayton's ist das sauberste und kürzeste und kann oben auf Ihrer Indexseite platziert werden, bevor JQuery-Dialoge initialisiert wurden. Ich möchte jedoch darauf hinweisen, dass ".live" veraltet ist. Die bevorzugte Aktion ist jetzt ".on". Wenn ".on" wie ".live" funktionieren soll, müssen Sie delegierte Ereignisse verwenden, um den Ereignishandler anzuhängen. Auch ein paar andere Dinge ...
Ich bevorzuge die Verwendung der Methode ui.keycode.ENTER, um den Eingabetaste zu testen, da Sie sich nicht an den tatsächlichen Schlüsselcode erinnern müssen.
Durch die Verwendung von "$ ('. UI-dialog-buttonpane button: first', $ (this))" für die Klickauswahl wird die gesamte Methode generisch.
Sie möchten "return false" hinzufügen. um die Standardeinstellung zu verhindern und die Weitergabe zu stoppen.
In diesem Fall...
quelle
Ich weiß nicht, was einfacher ist, aber normalerweise würden Sie verfolgen, welche Schaltfläche den aktuellen Fokus hat. Wenn der Fokus auf ein anderes Steuerelement geändert wird, bleibt der "Tastenfokus" auf der Taste, die zuletzt den Fokus hatte. Normalerweise beginnt der "Tastenfokus" auf Ihrer Standardtaste. Wenn Sie auf eine andere Schaltfläche tippen, wird der "Tastenfokus" geändert. Sie müssten entscheiden, ob das Navigieren zu einem anderen Formularelement den "Schaltflächenfokus" wieder auf die Standardschaltfläche zurücksetzen würde. Wahrscheinlich benötigen Sie auch eine andere visuelle Anzeige als die Standardeinstellung des Browsers, um die fokussierte Schaltfläche anzuzeigen, da sie den tatsächlichen Fokus im Fenster verliert.
Sobald Sie die Schaltflächenfokuslogik heruntergefahren und implementiert haben, würde ich wahrscheinlich dem Dialog selbst einen Key-Handler hinzufügen und die Aktion aufrufen, die der aktuell "fokussierten" Schaltfläche zugeordnet ist.
BEARBEITEN : Ich gehe davon aus, dass Sie jederzeit die Eingabetaste drücken möchten, wenn Sie Formularelemente ausfüllen und die Aktion "Aktuell" Vorrang hat. Wenn Sie dieses Verhalten nur wünschen, wenn die Schaltfläche tatsächlich fokussiert ist, ist meine Antwort zu kompliziert.
quelle
Ich habe diese Lösung gefunden, sie funktioniert unter IE8, Chrome 23.0 und Firefox 16.0
Es basiert auf dem Kommentar von Robert Schmidt.
Ich hoffe es hilft jemandem.
quelle
Manchmal vergessen wir die Grundlagen dessen, was der Browser bereits unterstützt:
Dadurch sendet der ENTERSchlüssel das Formular.
quelle
Ich habe es so gemacht ...;) Hoffe es wird jemandem helfen ..
quelle
Dies sollte funktionieren, um das Klicken des Klick-Handlers der Schaltfläche auszulösen. In diesem Beispiel wird davon ausgegangen, dass Sie das Formular bereits im Dialogfeld für die Verwendung des Plugins jquery.validate eingerichtet haben. könnte aber leicht angepasst werden.
quelle
Mir ist klar, dass es bereits viele Antworten gibt, aber ich denke natürlich, dass meine Lösung die sauberste und möglicherweise die kürzeste ist. Es hat den Vorteil, dass es in allen Dialogen funktioniert, die zu einem späteren Zeitpunkt erstellt werden.
quelle
Folgendes habe ich getan:
In diesem Fall ist myForm ein jQuery-Objekt, das das HTML des Formulars enthält (beachten Sie, dass dort keine "Formular" -Tags vorhanden sind ... Wenn Sie diese in den gesamten Bildschirm einfügen, wird sie aktualisiert, wenn Sie die Eingabetaste drücken).
Immer wenn der Benutzer im Formular die Eingabetaste drückt, entspricht dies dem Klicken auf die Schaltfläche "OK".
Dies vermeidet auch das Problem, dass das Formular geöffnet ist und die Schaltfläche "OK" bereits markiert ist. Während dies für Formulare ohne Felder gut wäre, möchten Sie wahrscheinlich, dass das erste Feld hervorgehoben wird, wenn der Benutzer etwas ausfüllen muss.
quelle
gemacht und gemacht
quelle
Wenn Sie die Auswahl der Schaltflächenelemente kennen:
Sollte den Trick für Sie tun. Dadurch wird die OK-Schaltfläche fokussiert, und durch Eingabe wird wie erwartet darauf geklickt. Dies ist die gleiche Technik, die in nativen UI-Dialogen verwendet wird.
quelle
quelle
Ich habe eine recht einfache Lösung für dieses Problem gefunden:
quelle
Das hat super für mich funktioniert ..
quelle
Keine dieser Lösungen schien in IE9 für mich zu funktionieren. Ich endete damit ..
quelle
Der folgende Körper wird verwendet, weil der Dialog DIV auf dem Körper hinzugefügt wurde, sodass der Körper jetzt das Tastaturereignis abhört. Es wurde auf IE8,9,10, Mojila, Chrome getestet.
quelle
Weil ich nicht genug Ruf habe, um Kommentare zu posten.
Geänderte Antwort von Basemm # 35 ebenfalls in Escape hinzufügen, um den Dialog zu schließen.
quelle
Es funktioniert gut Danke !!!
open: function () { debugger; $("#dialogDiv").keypress(function (e) { if (e.keyCode == 13) { $(this).parent().find("#btnLoginSubmit").trigger("click"); } }); },
quelle
Geben Sie Ihren Schaltflächen Klassen und wählen Sie sie wie gewohnt aus:
quelle