Angenommen, Sie erstellen einen Assistenten in einem HTML-Formular. Ein Knopf geht zurück und einer geht vorwärts. Da die Zurück- Schaltfläche beim Drücken zuerst im Markup angezeigt wird Enter, wird diese Schaltfläche zum Senden des Formulars verwendet.
Beispiel:
<form>
<!-- Put your cursor in this field and press Enter -->
<input type="text" name="field1" />
<!-- This is the button that will submit -->
<input type="submit" name="prev" value="Previous Page" />
<!-- But this is the button that I WANT to submit -->
<input type="submit" name="next" value="Next Page" />
</form>
Ich möchte entscheiden können, über welche Schaltfläche das Formular gesendet wird, wenn ein Benutzer drückt Enter. Auf diese Weise wechselt Enterder Assistent beim Drücken zur nächsten Seite, nicht zur vorherigen. Müssen Sie dazu verwenden tabindex
?
quelle
Ändern Sie den vorherigen Schaltflächentyp in eine Schaltfläche wie folgt:
Jetzt ist die Schaltfläche Weiter die Standardeinstellung. Außerdem können Sie das
default
Attribut hinzufügen , damit Ihr Browser es wie folgt hervorhebt:quelle
default
Attribut sprichst du? Es gibt kein "Standard" -Attribut, das gültig wäre: w3.org/html/wg/drafts/html/master/… (nicht in HTML5, HTML 4.01 Transitional / Strict, XHTML 1.0 Strict). Und ich verstehe nicht, warum es besser wäre, den Eingabetyp vonsubmit
aufbutton
zu ändern . Sie können problemlos mehrere Eingabeelemente vom Typ "Senden" in einem Formular haben. Ich verstehe nicht wirklich, warum diese Antwort so positiv bewertet wird.default
Attribut ist ein globales Attribut; Aufzählungsattribut .., das sich auf Aufzählungsstatus bezieht : w3.org/html/wg/drafts/html/master/… . Abgesehen von diesem Punkt ist der Schaltflächenaspekt dieser Antwort keine Antwort. Es ist ein ' bedingter Vorschlag ' oder eine Abfrage ( Frage selbst ).type="button"
das Formular nicht,type="submit"
tut es, aber das Ändern des Typs dieser Schaltflächen ist definitiv keine Lösung, da sich diese Schaltflächen grundsätzlich genauso verhalten sollten - die Frage des OP war, wie die Schaltfläche "Weiter" zum "Weiter" -Button gemacht werden soll Standard für das Drücken der Eingabetaste. Und es gibt eine mögliche Lösung in der akzeptierten Antwort.default
Attribut fürinput
Tags (wie bereits erwähnt) in HTML, und die (beliebten) Browser markieren NICHT die Schaltfläche mit diesem Attribut. Dies bedeutet, dass dieses Attribut nicht standardmäßig implementiert ist. Daher weiß ich es immer noch nicht Worüber @Wally Lawless sprach und warum diese Antwort so überbewertet ist. Es gibt nur ein gültigesdefault
Attribut in HTML5, ABER nur für das<track>
Tag: developer.mozilla.org/en-US/docs/Web/HTML/Element/trackGeben Sie Ihren Senden-Schaltflächen den gleichen Namen:
Wenn der Benutzer drückt Enterund die Anforderung an den Server gesendet wird, können Sie den Wert für
submitButton
Ihren serverseitigen Code überprüfen, der eine Sammlung von Formularpaaren enthältname/value
. Zum Beispiel in ASP Classic :Referenz: Verwenden mehrerer Senden-Schaltflächen in einem einzigen Formular
quelle
Wenn die Tatsache, dass die erste Schaltfläche standardmäßig verwendet wird, in allen Browsern konsistent ist, fügen Sie sie im Quellcode richtig herum ein und verwenden Sie dann CSS, um ihre scheinbaren Positionen zu wechseln.
float
sie nach links und rechts, um sie beispielsweise visuell umzuschalten.quelle
Manchmal reicht die von @palotasb bereitgestellte Lösung nicht aus. Es gibt Anwendungsfälle, in denen beispielsweise eine Schaltfläche zum Senden von "Filtern" über Schaltflächen wie "Weiter und Zurück" platziert ist. Ich habe eine Problemumgehung dafür gefunden: Kopieren Sie die Senden-Schaltfläche, die als Standard-Senden-Schaltfläche fungieren muss, in ein verstecktes Div und platzieren Sie sie im Formular über jeder anderen Senden-Schaltfläche. Technisch gesehen wird es beim Drücken der Eingabetaste über eine andere Schaltfläche gesendet als beim Klicken auf die sichtbare Schaltfläche Weiter. Da Name und Wert jedoch identisch sind, gibt es keinen Unterschied im Ergebnis.
quelle
Ich würde JavaScript verwenden, um das Formular zu senden. Die Funktion würde durch das OnKeyPress-Ereignis des Formularelements ausgelöst und würde erkennen, ob der EnterSchlüssel ausgewählt wurde. In diesem Fall wird das Formular gesendet.
Auf zwei Seiten finden Sie Techniken dazu: 1 , 2 . Basierend auf diesen ist hier ein Anwendungsbeispiel (basierend auf hier ):
quelle
Wenn Sie wirklich nur möchten, dass es wie ein Installationsdialog funktioniert, konzentrieren Sie sich einfach auf die Schaltfläche "Weiter" OnLoad.
Auf diese Weise Returnwird das Formular gesendet und weitergeleitet , wenn der Benutzer trifft . Wenn sie zurück wollen, können sie Tabauf die Schaltfläche klicken oder klicken.
quelle
Dies ist mit reinem HTML nicht möglich. Sie müssen sich für diesen Trick auf JavaScript verlassen.
Wenn Sie jedoch zwei Formulare auf der HTML-Seite platzieren, können Sie dies tun.
Form1 hätte die vorherige Schaltfläche.
Form2 hätte alle Benutzereingaben + die nächste Schaltfläche.
Wenn der Benutzer Enterin Form2 drückt , wird die Schaltfläche Weiter senden gesendet.
quelle
Sie können es mit CSS tun.
Setzen Sie die Schaltflächen
Next
zuerst mit der Schaltfläche in das Markup ein und anschließend mit derPrev
Schaltfläche.Verwenden Sie dann CSS, um sie so zu positionieren, dass sie wie gewünscht angezeigt werden.
quelle
Dies funktioniert in den meisten Browsern ohne JavaScript oder CSS:
Firefox, Opera, Safari und Google Chrome funktionieren alle.
Wie immer ist Internet Explorer das Problem.
Diese Version funktioniert, wenn JavaScript aktiviert ist:
Der Fehler in dieser Lösung ist also:
Die vorherige Seite funktioniert nicht, wenn Sie den Internet Explorer mit deaktiviertem JavaScript verwenden.
Wohlgemerkt, der Zurück-Button funktioniert immer noch!
quelle
Wenn Sie mehrere aktive Schaltflächen auf einer Seite haben, können Sie Folgendes tun:
Markieren Sie die erste Schaltfläche, die Sie beim EnterTastendruck auslösen möchten, als Standardschaltfläche im Formular. Verknüpfen Sie die zweite Schaltfläche mit der BackspaceSchaltfläche auf der Tastatur. Der BackspaceEreigniscode ist 8.
quelle
Das Ändern der Tabulatorreihenfolge sollte alles sein, um dies zu erreichen. Halte es einfach.
Eine andere einfache Option wäre, die Schaltfläche "Zurück" nach der Schaltfläche "Senden" in den HTML-Code einzufügen, sie jedoch nach links zu verschieben, damit sie auf der Seite vor der Schaltfläche "Senden" angezeigt wird.
quelle
Behalten Sie den Namen aller Senden-Schaltflächen bei - "prev".
Der einzige Unterschied ist der
value
Attribut mit eindeutigen Werten. Wenn wir das Skript erstellen, können wir anhand dieser eindeutigen Werte herausfinden, welche der Senden-Schaltflächen gedrückt wurde.Und schreiben Sie die folgende Codierung:
quelle
name="perv"
?Eine andere einfache Option wäre, die Schaltfläche "Zurück" nach der Schaltfläche "Senden" in den HTML-Code einzufügen, sie jedoch nach links zu verschieben, damit sie auf der Seite vor der Schaltfläche "Senden" angezeigt wird.
Das Ändern der Tabulatorreihenfolge sollte alles sein, um dies zu erreichen. Halte es einfach.
quelle
Als ich das erste Mal darauf stieß, kam ich auf einen onclick () / JavaScript-Hack, wenn die Auswahl nicht vor / nach ist, die ich wegen ihrer Einfachheit immer noch mag. Es geht so:
Wenn Sie auf eine der Senden-Schaltflächen klicken, wird die gewünschte Operation in einem ausgeblendeten Feld gespeichert (dies ist ein Zeichenfolgenfeld, das in dem Modell enthalten ist, dem das Formular zugeordnet ist) und das Formular an den Controller gesendet, der alle Entscheidungen trifft. Im Controller schreiben Sie einfach:
Sie können dies auch mit numerischen Operationscodes leicht verschärfen, um das Parsen von Zeichenfolgen zu vermeiden. Wenn Sie jedoch nicht mit Aufzählungen spielen, ist der Code weniger lesbar, veränderbar und selbstdokumentierend, und das Parsen ist ohnehin trivial.
quelle
Von https://html.spec.whatwg.org/multipage/forms.html#implicit-submission
Wenn die nächste Eingabe type = "submit" lautet und die vorherige Eingabe in type = "button" geändert wird, sollte das gewünschte Standardverhalten erzielt werden.
quelle
Folgendes habe ich ausprobiert:
if
Anweisung, die die erforderliche Aktion ausführt, wenn auf eine der Schaltflächen geklickt wird.In PHP
quelle
Ich bin auf diese Frage gestoßen, als ich versucht habe, eine Antwort auf im Grunde dasselbe zu finden, nur mit ASP.NET-Steuerelementen, als ich herausgefunden habe, dass die ASP-Schaltfläche eine Eigenschaft namens hat
UseSubmitBehavior
, mit der Sie festlegen können, welche die Übermittlung vornimmt.Nur für den Fall, dass jemand nach der ASP.NET-Schaltfläche sucht, um dies zu tun.
quelle
Mit JavaScript (hier jQuery) können Sie die Schaltfläche prev deaktivieren, bevor Sie das Formular senden.
quelle
Versuche dies..!
quelle
Ich habe ein sehr ähnliches Problem auf diese Weise gelöst:
Wenn JavaScript aktiviert ist (in den meisten Fällen heutzutage), werden alle Senden- Schaltflächen beim Laden der Seite über JavaScript (jQuery) auf Schaltflächen " herabgesetzt ". Klickereignisse auf der Schaltfläche " Verschlechtert " Die eingegebenen Schaltflächen werden auch über JavaScript behandelt.
Wenn JavaScript nicht aktiviert ist, wird das Formular mit mehreren Senden-Schaltflächen an den Browser gesendet. In diesem Fall wird durch Klicken Enterauf eine
textfield
innerhalb des Formulars das Formular mit der ersten Schaltfläche anstelle der beabsichtigten Standardeinstellung gesendet , aber zumindest kann das Formular weiterhin verwendet werden: Sie können sowohl mit der vorherigen als auch mit der nächsten Schaltfläche senden .Arbeitsbeispiel:
quelle
Sie können
Tabindex
dieses Problem lösen. Eine Änderung der Reihenfolge der Schaltflächen wäre ein effizienterer Weg, um dies zu erreichen.Ändern Sie die Reihenfolge der Schaltflächen und fügen Sie
float
Werte hinzu, um ihnen die gewünschte Position zuzuweisen, die Sie in IhrerHTML
Ansicht anzeigen möchten .quelle
Anhand des Beispiels, das Sie gegeben haben:
Wenn Sie auf "Vorherige Seite" klicken, wird nur der Wert von "prev" übermittelt. Wenn Sie auf "Nächste Seite" klicken, wird nur der Wert von "Weiter" gesendet.
Wenn Sie jedoch drücken Enter irgendwo auf dem Formular , wird weder "prev" noch "next" gesendet.
Mit Pseudocode können Sie also Folgendes tun:
quelle