我在一个表单中有两个提交按钮。我如何确定哪一个击中了服务器端?
当前回答
因为你没有指定你使用的服务器端脚本方法,我将给你一个适用于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
其他回答
你也可以这样做(我认为如果你有N个输入,这很方便)。
<input type="submit" name="row[456]" value="something">
<input type="submit" name="row[123]" value="something">
<input type="submit" name="row[789]" value="something">
一个常见的用例是为每个按钮使用来自数据库的不同id,这样稍后您就可以知道在服务器中单击了哪一行。
在服务器端(本例为PHP),您可以将“row”读取为数组以获取id。
$_POST['row']将是一个只有一个元素的数组,形式为[id => value](例如:[' 123' => 'something'])。
所以,为了得到点击的id,你做:
$index = key($_POST['row']);
key
处理多个提交按钮的最佳方法是在服务器脚本中使用切换案例
<form action="demo_form.php" method="get">
Choose your favorite subject:
<button name="subject" type="submit" value="html">HTML</button>
<button name="subject" type="submit" value="css">CSS</button>
<button name="subject" type="submit" value="javascript">JavaScript</button>
<button name="subject" type="submit" value="jquery">jQuery</button>
</form>
服务器代码/服务器脚本-你提交表单的地方:
文件demo_form.php
<?php
switch($_REQUEST['subject']) {
case 'html': // Action for HTML here
break;
case 'css': // Action for CSS here
break;
case 'javascript': // Action for JavaScript here
break;
case 'jquery': // Action for jQuery here
break;
}
?>
来源:W3Schools.com
解决方案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
}
您还可以使用href属性并为每个按钮发送带有附加值的get。但那时就不需要填表格了
href="/SubmitForm?action=delete"
href="/SubmitForm?action=save"
一个更好的解决方案是使用按钮标签提交表单:
<form>
...
<button type="submit" name="action" value="update">Update</button>
<button type="submit" name="action" value="delete">Delete</button>
</form>
按钮内部的HTML(例如..>Update<..是用户所看到的;因为有HTML提供,值是不可见的用户;它只发送到服务器。这样就不会给国际化和多种显示语言带来不便(在前一种解决方案中,按钮的标签也是发送到服务器的值)。
推荐文章
- 使伸缩项目正确浮动
- 形式内联内的形式水平在twitter bootstrap?
- 自定义元素在HTML5中有效吗?
- 如何触发自动填充在谷歌Chrome?
- 创建圈div比使用图像更容易的方法?
- 为什么Chrome浏览器不正确地确定页面是在不同的语言,并提供翻译?
- 在网页上用鼠标模拟震颤(例如帕金森病)?
- Bootstrap抛出Uncaught错误:Bootstrap的JavaScript需要jQuery
- 如何改变文本区域的边框颜色:焦点
- 我如何设置背景颜色为文本的宽度,而不是整个元素的宽度,使用CSS?
- 如何删除和清除所有的本地存储数据
- 强制打开“另存为…”弹出打开文本链接点击PDF在HTML
- 如何修改标签文本?
- 在HTML中还有其他有用的空格码吗,比如半空格的 , em-spaces, en-spaces等等?
- 输入触发器按钮单击