Wie kann ich ein POST-Formular mit dem <a href="…"> -Tag senden?

78

Wie kann ich ein POST-Formular showMessage.jspnur mit dem <a href="...">Tag senden ?

<form action="showMessage.jsp" method="post">
    <a href="showMessage.jsp"><%=n%></a>
    <input type="hidden" name="mess" value=<%=n%>/>
</form>
hozaifa
quelle
2
Mögliches Duplikat des Formulars "
Senden"

Antworten:

91

Kein JavaScript erforderlich, wenn Sie stattdessen eine Schaltfläche verwenden:

<form action="your_url" method="post">
    <button type="submit" name="your_name" value="your_value" class="btn-link">Go</button>
</form>

Sie können eine Schaltfläche so gestalten, dass sie wie ein Link aussieht , zum Beispiel:

.btn-link {
    border: none;
    outline: none;
    background: none;
    cursor: pointer;
    color: #0000EE;
    padding: 0;
    text-decoration: underline;
    font-family: inherit;
    font-size: inherit;
}
rybo111
quelle
9
Weil Ihre "Methode" kein aTag verwendet.
Winfield Trail
4
Alles schön und gut, aber Sie haben sich trotzdem entschieden, eine andere Frage zu beantworten als die, die gestellt wurde. Und da löschbare Tinte tatsächlich ein brauchbares Produkt ist, das im industriellen Maßstab hergestellt wird ...
Winfield Trail,
2
FWIW, ich sympathisiere mit Ihrer Antwort und es ist das, was ich persönlich lieber in Web-Apps sehen würde, die ich pflegen muss. Ich erkläre nur die Ablehnung - die ich übrigens nicht verlassen habe. ;)
Winfield Trail
@ rybo111 Ein Grund, warum Sie möglicherweise nicht verwenden möchten button: IE erzwingt 3D-Druckeffekte bei der Verwendung button, was bei Verwendung leicht vermieden werden kann a. Wenn Sie Ihre Schaltfläche mit formatieren display: inline-table, aist die Verwendung die einzige Möglichkeit, diesen Effekt zu vermeiden, da die normale Problemumgehung von position: relativenicht funktioniert.
Paya
Dies ist jedoch eine vermeidbare Ausrede, die Schaltfläche nicht zum Senden zu verwenden.
vintproykt
42

Sie müssen dafür Javascript verwenden.

<form id="form1" action="showMessage.jsp" method="post">
    <a href="javascript:;" onclick="document.getElementById('form1').submit();"><%=n%></a>
    <input type="hidden" name="mess" value=<%=n%>/>
</form>
Langhaus
quelle
40

Sie müssen die Javascript- submitFunktion für Ihr formObjekt verwenden. Schauen Sie sich andere Funktionen an .

<form action="showMessage.jsp" method="post">
    <a href="javascript:;" onclick="parentNode.submit();"><%=n%></a>
    <input type="hidden" name="mess" value=<%=n%>/>
</form>

quelle
7
Das Formularelement muss nicht immer der parentNode des Ankertags sein.
Langhaus
4

Wenn Sie MVC verwenden, um dies zu erreichen, müssen Sie so etwas tun

 <form action="/ControllerName/ActionName" method="post">
        <a href="javascript:;" onclick="parentNode.submit();"><%=n%></a>
        <input type="hidden" name="mess" value=<%=n%>/>
    </form>

Ich habe hier nur einige Beispiele durchgesehen und nicht gesehen, dass die MVC dachte, es würde nicht schaden, sie zu posten.

Dann würde ich bei Ihrer Aktion im Controller einfach <HTTPPost>oben drauf setzen. Ich glaube, wenn Sie es nicht <HTTPGET>oben drauf haben, würde es immer noch funktionieren, aber es fühlt sich ein bisschen sicherer an, es explizit dort zu platzieren.

Alexey Shevelyov
quelle
1

Es scheint wirklich keine Möglichkeit zu geben, das <a href= ..in eine POST-Methode zu täuschen . Da Sie jedoch Zugriff auf CSS einer Seite haben, kann dies durch die Verwendung eines Formulars ersetzt werden.

Leider ist die offensichtliche Art, die Schaltfläche in CSS nur als Ankertag zu gestalten, nicht browserübergreifend kompatibel, da verschiedene Browser <button value= ...unterschiedlich behandeln .

Incorrect:

<form action='actbusy.php' method='post'>
  <button type='submit' name='parameter' value='One'>Two</button>
</form>

Das obige Beispiel zeigt in FireFox "Zwei" und "Parameter senden: Eins", während es in IE8 "Eins" und "Parameter: Eins" zeigt.

Der Weg dahin besteht darin, versteckte Eingabefelder für die Übermittlung von Daten und die Schaltfläche nur für die Übermittlung zu verwenden.

<form action='actbusy.php' method='post'>
   <input class=hidden name='parameter' value='blaah'>
   <button type='submit' name='delete' value='Delete'>Delete</button>
</form>

Beachten Sie, dass diese Methode einen Nebeneffekt hat, der neben 'parameter: blaah' auch 'delete: Delete' als überschüssige Parameter in POST liefert.

Sie möchten für eine Schaltfläche das Wertattribut und die Schaltflächenbezeichnung zwischen den Tags beibehalten (in diesem Fall 'Löschen'), da (wie oben angegeben) einige Browser einen und einige einen anderen als Schaltflächenbezeichnung anzeigen.

Gelegt
quelle
Sind Sie sicher, dass IE8 das tut? <button value="Bad">Good</button>Ich habe es gerade in IE7 versucht und es wird "Gut" angezeigt.
Rybo111