Ich habe zwei einreichen Schaltflächen in einem Formular. Wie kann ich feststellen, welche Schaltfläche serverseitig angeklickt wurde?
Antworten
Zu viele Anzeigen?Ein HTML-Beispiel zum Senden einer anderen Formularaktion bei verschiedenen Schaltflächenklicks:
<form action="/login" method="POST">
<input type="text" name="username" value="your_username" />
<input type="password" name="password" value="your_password" />
<button type="submit">Login</button>
<button type="submit" formaction="/users" formmethod="POST">Add User</button>
</form>
Dasselbe Formular wird verwendet, um einen neuen Benutzer hinzuzufügen und einen Benutzer anzumelden.
Definir name
como array
.
<form action='' method=POST>
(...) some input fields (...)
<input type=submit name=submit[save] value=Save>
<input type=submit name=submit[delete] value=Delete>
</form>
Beispiel für Server-Code (PHP):
if (isset($_POST["submit"])) {
$sub = $_POST["submit"];
if (isset($sub["save"])) {
// Save something;
} elseif (isset($sub["delete"])) {
// Delete something
}
}
elseif
sehr wichtig, da sonst beide geparst werden.
Hinweis: Wenn Sie mehrere Schaltflächen zum Übermitteln haben und die Eingabetaste (ENTER) drücken, wird auf der Tastatur der Standardwert für die erste Schaltfläche im DOM verwendet.
例
<form>
<input type="text" name="foo" value="bar">
<button type="submit" name="operation" value="val-1">Operation #1</button>
<button type="submit" name="operation" value="val-2">Operation #2</button>
</form>
Wenn Sie in diesem Formular auf ENTER drücken, werden die folgenden Parameter gesendet:
foo=bar&operation=val-1
Da Sie nicht angegeben haben, welche serverseitige Skripting-Methode Sie verwenden, gebe ich Ihnen ein Beispiel, das für Python funktioniert, mit CherryPy (obwohl sie auch in anderen Zusammenhängen nützlich sein kann):
<button type="submit" name="register">Create a new account</button>
<button type="submit" name="login">Log into your account</button>
Anstatt den Wert zu verwenden, um festzustellen, welche Taste gedrückt wurde, können Sie den Namen verwenden (mit der Option <button>
Tag anstelle von <input>
). Wenn Ihre Schaltflächen zufällig denselben Text haben, wird dies keine Probleme verursachen. Die Namen aller Formularelemente, einschließlich der Schaltflächen, werden als Teil der URL gesendet.
In CherryPy ist jeder dieser Punkte ein Argument für eine Methode, die den serverseitigen Code ausführt. Wenn Ihre Methode also nur **kwargs
für seine Parameterliste (anstatt mühsam jeden einzelnen Namen jedes Formularelements einzugeben), dann können Sie überprüfen, welche Schaltfläche wie folgt gedrückt wurde:
if "register" in kwargs:
pass # Do the register code
elif "login" in kwargs:
pass # Do the login code