当前位置:  开发笔记 > 编程语言 > 正文

一个表单中的两个提交按钮

如何解决《一个表单中的两个提交按钮》经验,为你挑选了11个好方法。

我在表单中有两个提交按钮.如何确定哪个服务器被服务器端?



1> Parrots..:

您可以为每个输入赋予不同的值并保持相同的名称:



然后在代码中检查以查看触发的内容:

if ($_POST['action'] == 'Update') {
    //action for update here
} else if ($_POST['action'] == 'Delete') {
    //action for delete
} else {
    //invalid action!
}

唯一的问题是你将逻辑绑定到输入中的文本.您也可以为每个人提供一个唯一的名称,并检查$ _POST是否存在该输入:



并在代码中:

if (isset($_POST['update_button'])) {
    //update action
} else if (isset($_POST['delete_button'])) {
    //delete action
} else {
    //no button pressed
}


对于i18n目的,使用所选答案可能更好.
OP没有要求PHP.
@LaszloPapp作为答案本身说,如果您使用上面选择的答案,您可以将表格国际化(即翻译成不同的语言或方言)而不影响逻辑.如果您使用此答案中的第一个选项,则逻辑取决于表单实际呈现的语言.
i18n = i [nternationalizatio] n,18代表第一个和最后一个之间的18个字母.
@RobinGreen:请原谅?
如果你在jQuery中使用$(form).serialize(),这不起作用.

2> Greg..:

如果您为每个人命名,则点击的名称将作为任何其他输入发送.



还要确保按钮名称的名称正确!例如,"button-1"不起作用.可以为某些人节省很多麻烦,所以请记住这一点.
通常,表单中的所有输入都与表单一起发送.由于仅在单击时提交按钮的值,因此您必须搜索这些预定义名称的表单值.我认为另一个答案(http://stackoverflow.com/a/21778226/88409)涉及给它们所有相同的名称,具有不同的值,更有意义.然后,您只需获取单个已知表单字段名称下的值.它还使得更明显的是,仅为给定的输入名称发送一个值(单击的值),就像单选按钮的工作方式(相同的名称,不同的值)一样.
@Triynko,正如罗宾格林在回答的评论中所说,这个更适合国际化.例如,如果页面以西班牙语呈现,则按钮的文本可能会有所不同.因此,在这种情况下,拥有代码的逻辑取决于该按钮的文本将会中断.通过名称更安全,因为它是一个不向用户显示的值,因此可以更多地被视为"私有"变量而不是用户的消息.

3> kiril..:

更好的解决方案包括使用按钮标签提交表单:

...

这种方式对国际化和多种显示语言没有任何不便(在前一种解决方案中,按钮的标签也是发送给服务器的值).


显然浏览器行为不同; 一些提交值属性,其他提交标签之间的字符串......所以要小心这一点.
@Jeroen Bull.哪些浏览器在标签之间提交文本?输入或按钮应该只提交'value'属性.按钮可以在其标签之间包含任何内容,包括图像或其他HTML标签.这就是在输入元素上使用按钮的全部意义,并且您试图建议浏览器将所有内容转储为值?没门.
好的,你的权利.然后,我检查了HTML5 W3C工作草案.引用:>> value属性为表单提交提供元素的值.元素的值是元素的value属性的值(如果有),否则为空字符串.>>注意:如果按钮本身用于启动表单提交,则按钮(及其值)仅包含在表单提交中.
@kiril该链接的片段使用两种不同类型的`

显然这在IE9及更早版本中不起作用,但对于其他浏览器,你应该没问题(参见:w3schools.com HTML



8> Joakim..:

也许建议的解决方案在2009年工作,但我已经测试了所有这些赞成的答案,没有人在任何浏览器中工作.

只有我找到工作的解决方案是这样的:(但我认为使用它有点难看)


@ rybo111 IE9浏览器(女巫相对仍然广泛使用)不支持`formaction`

9> Shailesh Son..:

处理多个提交按钮的最佳方法是在服务器脚本中使用switch case



Choose your favorite subject:







服务器代码/服务器脚本 - 您提交表单的位置:

demo_form.php


资料来源:W3Schools.com



10> Shule..:

由于您未指定要使用的服务器端脚本编写方法,因此,我将为您提供一个使用CherryPy的适用于Python的示例(尽管它也可能对其他上下文有用):



您可以使用名称(使用

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有