Mehrere submit-buttons in einem HTML-Formular
Angenommen, Sie erstellen einen Assistenten in ein HTML-Formular. Eine Taste geht wieder, und einer geht nach vorne. Da die zurück Schaltfläche gelangen Sie zunächst in das markup, wenn Sie die Taste Enter verwenden, wird die Schaltfläche zum senden des Formulars.
Beispiel:
HTML:
<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 würde gerne bekommen, um zu entscheiden, welche Taste verwendet wird, das Formular zu senden, wenn der Benutzer die Taste Enter. So, wenn Sie drücken Sie die Taste Enter wird der Assistent zur nächsten Seite wechseln, nicht die vorherigen. Haben Sie verwenden, um tabindex
zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hoffe, das hilft. Ich bin gerade dabei das trick
float
ing die Schaltflächen auf der rechten Seite.Diese Weise die
Prev
- Taste ist Links von derNext
- Taste, sondern dieNext
kommt zuerst in der HTML-Struktur:CSS:
HTML:
Vorteile über andere Vorschläge: kein JavaScript-code zugänglich, und die beiden Tasten bleiben
type="submit"
.Ändern Sie die previous-Taste Typ in ein button wie dieser:
Nun die Nächsten - Taste die Standard -, plus-man könnte auch hinzufügen, die
default
Attribut zu, so dass Ihr browser markieren, etwa so:default
Attribut redest du? Es gibt keine "default" - Attribut, die wäre gültig: w3.org/html/wg/drafts/html/master/... (nicht in HTML 5, HTML 4.01 Transitional/Strict, XHTML 1.0 Strict). Und ich sehe nicht ein, warum ändern Sie die Art des Eingangs aussubmit
zubutton
wäre besser. Sie können mehrere submit type input-Elemente in einem Formular, ohne ein problem. Ich weiß wirklich nicht verstehen, warum diese Antwort so von Ihnen positiv bewertet werden.default
Attribut ist ein Global-Attribut; Attribut aufgezählt.. was ist in Bezug auf die Aufzählung Staaten: w3.org/html/wg/drafts/html/master/... . abgesehen von diesem Punkt aus.. die Schaltfläche Aspekt, der diese Antwort ist nicht eine Antwort.. es ist ein 'bedingte suggestion' oder AbfrageFrage selbst).type="button"
nicht das Formular senden, wirdtype="submit"
tut, aber die Art ändern diese Tasten, ist definitiv keine Lösung, denn diese buttons sollten grundsätzlich Verhalten sich auf die gleiche Art und Weise - die OP ' s Frage war, wie man das "Next" - Taste, die standardmäßig für das drücken der Enter-Taste. Und es gibt eine mögliche Lösung, die in der akzeptierten Antwort.default
Attribut fürinput
- tags (wie ich vorher schon erwähnt habe) in HTML, und die (gängigen) Browsern NICHT markieren Sie die Schaltfläche, die dieses Attribut gesetzt hat, was bedeutet, es ist kein Standard-Implementierung dieses Attributs - also ich weiß noch nicht, was @Wally Gesetzlosen spricht, und warum diese Antwort ist so überbewertet. Es gibt nur eine gültigedefault
- Attribut in HTML5 eingeführt, ABER nur für die<track>
- tag: developer.mozilla.org/en-US/docs/Web/HTML/Element/trackGeben Sie Ihre submit-buttons den gleichen Namen wie diese:
Wenn der Benutzer die Taste Enter und die Anfrage geht an den server, Sie können überprüfen Sie den Wert für
submitButton
auf Ihrem server-side-code enthält eine Sammlung von formname/value
Paare. Zum Beispiel, in ASP-Classic:Referenz: Mit mehreren submit-buttons in einem einzigen Formular
Wenn die Tatsache, dass die erste Schaltfläche wird standardmäßig verwendet, ist konsistent in allen Browsern, legte Ihnen den richtigen Weg, um in der source-code, und dann verwenden Sie CSS, um wechseln Sie Ihre scheinbare Positionen.
float
Sie Links und rechts wechseln Sie herum visuell, zum Beispiel.Wenn Sie wirklich nur wollen, dass es funktioniert wie ein install-dialog, nur geben Sie den Fokus auf die Schaltfläche "Weiter" OnLoad".
So, wenn der Benutzer trifft Zurück, wird das Formular übermittelt und geht nach vorne. Wenn Sie wollen zurück zu gehen, Sie können drücken Sie Tab oder klicken Sie auf die Schaltfläche.
Manchmal die bereitgestellte Lösung von @palotasb ist nicht ausreichend. Es gibt Anwendungsfälle, bei denen zum Beispiel ein "Filter" submit-button platziert, über Schaltflächen wie "Weiter" und "zurück". Ich fand eine Abhilfe für dieses: kopieren den submit-button, die Bedürfnisse zu handeln, als die Standard-submit-button in einem versteckten div-Element und legen Sie Sie in das Formular alle anderen submit-button.
Technisch wird es eingereicht werden, indem Sie eine andere Taste, wenn Sie die EINGABETASTE drücken, dann beim Klick auf die sichtbare Schaltfläche Weiter. Aber da der name und der Wert ist der gleiche, es gibt keinen Unterschied im Ergebnis.
Können Sie es mit CSS.
Setzen Sie die Tasten in das markup mit der
Next
- Taste zuerst, dann diePrev
Taste danach.Dann verwenden Sie CSS um Sie zu positionieren, um zu erscheinen, wie Sie wollen.
Diese nicht mit reinem HTML. Sie müssen verlassen sich auf JavaScript für diesen trick.
Jedoch, wenn Sie zwei Formulare, die auf der HTML-Seite, die Sie dies tun können.
Form1 hätte die zurück Taste.
Form2 hätte Eingaben, + nächste-Taste.
Wenn der Benutzer die Taste Enter in Form2, werden die Nächsten submit-button würde Feuer.
Ich würde mit JavaScript das Formular abschicken. Würde die Funktion ausgelöst werden, die durch die OnKeyPress-Ereignis des form-Elements und erkennen würde, ob die Enter - Taste ausgewählt wurde. Wenn dies der Fall ist, wird das Formular abschicken.
Hier sind zwei Seiten, die Techniken auf, wie dies zu tun: Eins, Zwei. Auf dieser Grundlage hier ist ein Beispiel für die Verwendung (basierend auf hier):
Dies funktioniert ohne JavaScript oder CSS in den meisten Browsern:
Firefox, Opera, Safari und Google Chrome funktionieren alle.
Wie immer, Internet Explorer ist das problem.
Diese version funktioniert nur, wenn JavaScript eingeschaltet ist:
Also der Fehler in dieser Lösung ist:
Vorherigen Seite nicht funktioniert, wenn man Internet Explorer mit JavaScript aus.
Verstand Sie die zurück-Taste funktioniert noch!!
Wenn du mehrere buttons auf einer Seite, dann können Sie etwas wie das hier tun:
Markieren Sie die erste Schaltfläche, die Sie auslösen wollen auf die Enter Tastendruck als die Standard-Schaltfläche auf das Formular. Für die zweite Schaltfläche, assoziieren Sie ihn mit der Backspace - Taste auf der Tastatur. Die Backspace eventcode ist 8.
JS:
HTML:
Ändern der tab-Reihenfolge sollte alles, was es braucht, um dies zu erreichen. Halten Sie es einfach.
Eine weitere einfache Möglichkeit wäre, setzen die zurück-Taste, nachdem Sie den Absenden-button in den HTML-code, sondern schwebt es nach Links, so dass es auf der Seite angezeigt wird, bevor Sie den Absenden-button.
Eine weitere einfache Möglichkeit wäre, setzen die zurück-Taste, nachdem Sie den Absenden-button in den HTML-code, sondern schwebt es nach Links, so dass es auf der Seite angezeigt wird, bevor Sie den Absenden-button.
Ändern der tab-Reihenfolge sollte alles, was es braucht, um dies zu erreichen. Halten Sie es einfach.
Halten die Namen von allen submit-buttons das gleiche - "prev".
Der einzige Unterschied ist die
value
Attribut mit eindeutigen Werten. Wenn wir das Skript erstellen, diese einzigartigen Werte werden uns dabei helfen, herauszufinden, welcher der submit-buttons gedrückt wurde.Und schreiben Sie die folgende Kodierung:
name="perv"
?Ersten mal kam ich gegen diesen, kam ich mit einem onclick () - /JavaScript-hack, wenn Entscheidungen nicht prev/next, die ich noch immer mag, für seine Einfachheit. Es geht so:
Wenn entweder submit-button geklickt wird, speichert es die gewünschte operation in einem versteckten Feld (welches ein string-Feld enthalten, in das Modell der form zugeordnet ist) und übermittelt das Formular an den Controller, das macht die ganze Entscheidung. In den Controller, man schreibt einfach:
Können Sie auch ziehen Sie diese leicht mit numerischen operation-codes zu vermeiden, die die Zeichenfolge analysieren, aber es sei denn, Sie spielen mit Aufzählungen, der code ist schlechter lesbar, veränderbar, und selbst dokumentieren und das analysieren ist trivial, trotzdem.
Vom https://html.spec.whatwg.org/multipage/forms.html#implicit-submission
Dass der nächste input type="submit" und die änderung der bisherigen input type="button" geben sollte, die gewünschte Standard-Verhalten.
Dies ist, was habe ich ausprobiert:
if
Aussage, das die erforderliche Aktion, wenn eine Schaltfläche geklickt wird.In PHP,
Stieß ich auf diese Frage, wenn Sie versuchen, eine Antwort zu finden, die im Grunde das gleiche, nur mit ASP.NET steuert, als ich herausfand, dass die ASP-button hat eine Eigenschaft namens
UseSubmitBehavior
es erlaubt, die man nicht abschicken.Nur für den Fall, jemand ist auf der Suche nach der ASP.NET button Weg, es zu tun.
Mit JavaScript (hier jQuery), können Sie deaktivieren Sie die prev-Taste, bevor das Formular an.
Versuchen Sie, diese..!
HTML:
Löste ich ein sehr ähnliches problem auf diese Weise:
Wenn JavaScript aktiviert ist (in den meisten Fällen heutzutage), dann alle submit-buttons sind "abgebaut" buttons auf das laden der Seite via JavaScript (jQuery). Klicken Sie auf Ereignisse auf der "abgebaut" - Taste eingegeben Tasten sind auch direkt über JavaScript.
Wenn JavaScript nicht aktiviert ist, dann wird das Formular an den browser geliefert mit mehreren submit-buttons. In diesem Fall betätigen von Enter auf eine
textfield
innerhalb des Formulars senden das Formular mit der ersten Schaltfläche wird anstelle der beabsichtigten Standard, aber zumindest die form ist noch nutzbar: Sie können sowohl mit der prev und nächsten Tasten.Beispiel:
HTML:
Können Sie
Tabindex
um dieses Problem zu lösen. Auch das ändern der Reihenfolge der Schaltflächen wäre ein effizienter Weg, dies zu erreichen.Ändern Sie die Reihenfolge der Schaltflächen und fügen Sie
float
Werte, ordnen Sie die gewünschte position, die Sie wollen, um zu zeigen, in IhrerHTML
anzeigen.Verwenden das Beispiel, das Sie gegeben:
Wenn Sie auf "Vorherige Seite", ist nur der Wert "prev" eingereicht werden. Wenn Sie klicken Sie auf "Nächste Seite" nur der Wert "next" eingereicht werden.
Wenn doch, drücken Sie die Taste Enter irgendwo auf dem Formular, weder "prev" oder "next" eingereicht werden.
Also mit pseudocode können Sie das folgende tun: