Sagen wir, ich habe:
<form method="get" action="something.php">
<input type="text" name="name" />
</form>
<input type="submit" />
Wie gehe ich vor, um dieses Formular mit dieser Schaltfläche zum Senden außerhalb des Formulars zu senden? Ich denke, in HTML5 gibt es ein Aktionsattribut für das Senden, aber ich bin mir nicht sicher, ob dies vollständig browserübergreifend ist und ob es sowieso nicht vorhanden ist mach das?
Antworten:
Update: In modernen Browsern können Sie dazu das
form
Attribut verwenden .Soweit ich weiß, können Sie dies nicht ohne Javascript tun.
Hier ist, was die Spezifikation sagt
Das ist meine Kühnheit
Eine
submit
Schaltfläche wird als Steuerelement betrachtet.http://www.w3.org/TR/html4/interact/forms.html#h-17.2.1
Aus den Kommentaren
Warum platzieren Sie das
input
Formular nicht innerhalb des Formulars, sondern verwenden CSS, um es an einer anderen Stelle auf der Seite zu positionieren?quelle
In HTML5 gibt es das Formularattribut . Grundsätzlich
quelle
<button type="submit" form="frmFoo" onclick="!this.form&&$('#'+$(this).attr('form')).submit()">
Wie Experimente gezeigt haben, ist this.form das angehängte Formular DomElement, während es ansonsten null ist. // edit: jQuery, aber auch mit Vanille möglich ofc<button type="submit" form="frmFoo" onclick="!this.form && document.getElementById('myform').submit()">
Eine Lösung, die für mich gut funktioniert, fehlt hier noch. Es erfordert ein visuell verborgenes
<submit>
oder<input type="submit">
Element innerhalb des<form>
und ein zugehöriges<label>
Element außerhalb davon. Es würde so aussehen:Über diesen Link können Sie nun auf das Formularelement klicken,
<submit>
indem Sie auf das<label>
Element klicken .quelle
label
ist kein fokussierbares Element (AFAIK), daher ist es für einen Benutzer nicht intuitiv, der nur mit der Tastatur zur Schaltfläche navigiert und dann die Leertaste drückt, um diese Schaltfläche beispielsweise zu aktivieren. (Mir ist klar, dass Sie<enter>
stattdessen drücken können , aber das ist nicht die einzige Möglichkeit, mit der Tastatur durch Formulare zu navigieren.)label
Schaltfläche über die Registerkarte zu fokussieren , können Sie dastabindex
HTML-Attribut verwenden:<label for="submit-form" tabindex="0">Submit</label>
gemäß dieser FrageWenn Sie jQuery verwenden können, können Sie dies verwenden
Die Quintessenz besteht also darin, eine Schaltfläche wie "Senden" zu erstellen, die eigentliche Schaltfläche "Senden" in das Formular einzufügen (natürlich auszublenden) und das Formular per Abfrage zu senden, indem Sie auf die Schaltfläche "Gefälschtes Senden" klicken. Ich hoffe es hilft.
quelle
$('button[form]').click(function (){ var formId = $(this).attr('form'); $('#' + formId).submit(); });
Dies funktionierte für mich, um eine Remote-Senden-Schaltfläche für ein Formular zu haben.
quelle
Ähnlich wie bei einer anderen Lösung hier, mit geringfügigen Änderungen:
https://www.w3schools.com/tags/att_form.asp
quelle
Versuche dies:
Obwohl ich vorschlagen würde
id
, dem Formular ein hinzuzufügen und stattdessen darauf zuzugreifendocument.forms[index]
.quelle
Sie können jQuery jederzeit verwenden:
quelle
Hier ist eine ziemlich solide Lösung, die die bisher besten Ideen enthält und meine Lösung für ein mit Offereins hervorgehobenes Problem enthält. Es wird kein Javascript verwendet.
Wenn Sie sich für die Abwärtskompatibilität mit IE (und sogar Edge 13) interessieren, können Sie das
form="your-form"
Attribut nicht verwenden .Verwenden Sie eine Standard-Übermittlungseingabe mit Anzeige keine und fügen Sie eine Beschriftung außerhalb des Formulars hinzu:
Beachten Sie die Verwendung von
display: none;
. Dies ist beabsichtigt. Die Verwendung der Bootstrap-.hidden
Klasse steht in Konflikt mit jQuery's.show()
und.hide()
und ist seitdem in Bootstrap 4 veraltet.Fügen Sie nun einfach eine Bezeichnung für Ihre Übermittlung hinzu (gestylt für Bootstrap):
Im Gegensatz zu anderen Lösungen verwende ich auch tabindex - auf 0 gesetzt - was bedeutet, dass wir jetzt mit Tastatur-Tabs kompatibel sind. Durch Hinzufügen des
role="button"
Attributs erhält es den CSS-Stilcursor: pointer
. Et voila. ( Siehe diese Geige ).quelle
Enter
keine Auswirkung. Daher erscheint es ein wenig sinnlos, darauf zugreifen zu können. Gibt es eine Möglichkeit, dies ohne Verwendung von JavaScript zu tun?<input... />
selbstschließende Syntax, die fast jeder hier (auch) offen und falsch verwendet, auf das richtige leere No-Close-Tag korrigiert hast ! :) Ein dickes Lob!Das funktioniert perfekt! ;)
Dies kann mit Ajax und mit dem, was ich nenne: "einem Formspiegelelement" erfolgen. Um ein Formular mit einem Element außerhalb zu senden, können Sie ein gefälschtes Formular erstellen. Das vorherige Formular wird nicht benötigt.
Code Ajax wäre wie folgt:
Dies ist sehr nützlich, wenn Sie einige Daten in einem anderen Formular senden möchten, ohne das übergeordnete Formular zu senden.
Dieser Code kann wahrscheinlich je nach Bedarf angepasst / optimiert werden. Es funktioniert perfekt !! ;) Funktioniert auch, wenn Sie ein Auswahlfeld wie das folgende wünschen:
Ich hoffe es hat jemandem geholfen wie es mir geholfen hat. ;)
quelle
Vielleicht könnte das funktionieren, aber ich weiß nicht, ob dies gültiges HTML ist.
quelle
Ich hatte ein Problem, bei dem ich versuchte, das Formular vor einem Tabellenzellenelement auszublenden, aber dennoch die Schaltfläche zum Senden von Formularen anzuzeigen. Das Problem war, dass das Formularelement immer noch einen zusätzlichen Leerraum einnahm, wodurch das Format meiner Tabellenzelle seltsam aussah. Die Anzeige: keine und Sichtbarkeit: versteckte Attribute funktionierten nicht, da dadurch auch die Schaltfläche zum Senden ausgeblendet wurde, da sie in dem Formular enthalten war, das ich ausblenden wollte. Die einfache Antwort bestand darin, die Formularhöhe mithilfe von CSS auf kaum etwas festzulegen
So,
CSS -
arbeitete für mich.
quelle
Ich habe diese Methode verwendet und es hat mir gut gefallen. Sie überprüft das Formular vor dem Senden und ist auch mit Safari / Google kompatibel. keine jquery nn
quelle