我在一个表单中有两个提交按钮。我如何确定哪一个击中了服务器端?


当前回答

因为你没有指定你使用的服务器端脚本方法,我将给你一个适用于Python的例子,使用CherryPy(尽管它可能对其他上下文也有用):

<button type="submit" name="register">Create a new account</button>
<button type="submit" name="login">Log into your account</button>

您可以使用名称(带有<button>标记而不是<input>标记),而不是使用值来确定按下了哪个按钮。这样,如果您的按钮碰巧有相同的文本,也不会造成问题。所有表单项(包括按钮)的名称都作为URL的一部分发送。

在CherryPy中,每一个都是执行服务器端代码的方法的参数。因此,如果你的方法只有**kwargs作为参数列表(而不是乏味地输入每个表单项的每个名称),那么你可以检查哪个按钮被按下了,像这样:

if "register" in kwargs:
    pass # Do the register code
elif "login" in kwargs:
    pass # Do the login code

其他回答

需要注意的是,如果您有多个提交按钮,并且您按了return (ENTER键),那么键盘上的默认按钮值将是DOM上的第一个按钮。

例子:

<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>

如果你在这个表单上按ENTER键,将发送以下参数:

foo=bar&operation=val-1

你可以像这样显示按钮:

<input type="submit" name="typeBtn" value="BUY">
<input type="submit" name="typeBtn" value="SELL">

然后在代码中,你可以使用:

if request.method == 'POST':
    #valUnits = request.POST.get('unitsInput','')
    #valPrice = request.POST.get('priceInput','')
    valType = request.POST.get('typeBtn','')

(valUnits和valPrice是我从表单中提取的其他一些值,用于演示)

您还可以使用href属性并为每个按钮发送带有附加值的get。但那时就不需要填表格了

href="/SubmitForm?action=delete"
href="/SubmitForm?action=save"

将name定义为数组。

<form action='' method=POST>
    (...) some input fields (...)
    <input type=submit name=submit[save] value=Save>
    <input type=submit name=submit[delete] value=Delete>
</form>

服务器代码示例(PHP):

if (isset($_POST["submit"])) {
    $sub = $_POST["submit"];

    if (isset($sub["save"])) {
        // Save something;
    } elseif (isset($sub["delete"])) {
        // Delete something
    }
}

Elseif非常重要,因为两者都将被解析。

如果你给每一个名称,点击的将作为任何其他输入发送。

<input type="submit" name="button_1" value="Click me">