我在一个表单中有两个提交按钮。我如何确定哪一个击中了服务器端?
当前回答
我认为您应该能够读取GET数组中的名称/值。我认为没有点击的按钮不会出现在列表中。
其他回答
如果你给每一个名称,点击的将作为任何其他输入发送。
<input type="submit" name="button_1" value="Click me">
我认为您应该能够读取GET数组中的名称/值。我认为没有点击的按钮不会出现在列表中。
需要注意的是,如果您有多个提交按钮,并且您按了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
也许这里建议的解决方案在2009年是有效的,但我已经测试了所有这些被好评的答案,没有一个在任何浏览器上都有效。
我发现唯一有效的解决方案是这样的(但我觉得用起来有点难看):
<form method="post" name="form">
<input type="submit" value="dosomething" onclick="javascript: form.action='actionurl1';"/>
<input type="submit" value="dosomethingelse" onclick="javascript: form.action='actionurl2';"/>
</form>
解决方案1: 给每个输入一个不同的值,并保持相同的名称:
<input type="submit" name="action" value="Update" />
<input type="submit" name="action" value="Delete" />
然后在代码中检查哪些被触发:
if ($_POST['action'] == 'Update') {
//action for update here
} else if ($_POST['action'] == 'Delete') {
//action for delete
} else {
//invalid action!
}
这样做的问题是,您将逻辑绑定到输入中的用户可见文本。
解决方案2: 给每个对象一个唯一的名称,并检查$_POST是否存在输入:
<input type="submit" name="update_button" value="Update" />
<input type="submit" name="delete_button" value="Delete" />
在代码中:
if (isset($_POST['update_button'])) {
//update action
} else if (isset($_POST['delete_button'])) {
//delete action
} else {
//no button pressed
}