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

回答(18)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

有一个新的HTML5方法, formaction 属性:

First action

Second action

就个人而言,我通常使用Javascript远程提交表单(以获得更快的感知反馈),并将此方法作为备份 . 在两者之间,唯一未被覆盖的人是IE <9且禁用Javascript .

当然,如果您基本上采用相同的操作服务器端而不管按下哪个按钮,这可能是不合适的,但通常如果有两个用户端操作可用,那么它们也将映射到两个服务器端操作 .

Edit: 正如Pascal_dher在评论中所指出的,该属性也可以在 标签上找到 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我认为你应该能够读取GET数组中的名称/值 . 我认为没有点击的按钮不会出现在该列表中 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

'; //any value to post PHP

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

...

Update

Delete

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果您有两个具有不同功能的提交按钮,则在输入按钮中明确告知提交类型,如:

您无需担心服务器端调用哪个按钮 . 分别在每个函数中编写逻辑并调用它们 . 他们将在不干扰他人的情况下开展工作 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

Choose your favorite subject:

HTML

CSS

Java Script

jQuery

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

demo_form.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;

}

?>

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

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

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

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以像这样显示按钮:

然后在代码中,您可以使用以下方法获取值:

if request.method == 'POST':

#valUnits = request.POST.get('unitsInput','')

#valPrice = request.POST.get('priceInput','')

valType = request.POST.get('typeBtn','')

(valUnits和valPrice是我从我留下的表格中提取的一些其他值,用于说明)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

既然你没有指定你正在使用的服务器端脚本方法,我会给你一个适用于Python的例子,使用CherryPy(虽然它也可能对其他上下文有用):

Create a new account

Log into your account

您可以使用名称(使用 标记而不是 )而不是使用该值来确定按下了哪个按钮 . 这样,如果您的按钮恰好具有相同的文本,则不会导致问题 . 所有表单项的名称(包括按钮)都将作为URL的一部分发送 . 在CherryPy中,每个都是执行服务器端代码的方法的参数 . 因此,如果您的方法只有 **kwargs 作为其参数列表(而不是繁琐地键入每个表单项的每个名称),那么您可以检查以查看按下了哪个按钮:

if "register" in kwargs:

pass #Do the register code

elif "login" in kwargs:

pass #Do the login code

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

你也可以这样做(我认为如果你有N个输入就很方便) .

然后在服务器端(在我的示例中为PHP),您可以将“row”作为数组读取以获取索引:

$index = key($_POST['row']);

$ _POST ['row']将是一个只包含一个元素的数组,格式为index => value(例如:'2'=>'something“) .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

这非常容易测试

只需将其放在HTML页面中,单击按钮,然后查看URL

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

href="/SubmitForm?action=delete"

href="/SubmitForm?action=save"

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

将 name 定义为 array .

(...) some input fields (...)

示例服务器代码(PHP):

if (isset($_POST["submit"])) {

$sub = $_POST["submit"];

if (isset($sub["save"])) {

// save something;

} elseif (isset($sub["delete"])) {

// delete something

}

}

elseif 非常重要,因为两者都会被解析 . 请享用 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

使用格式HTML属性

First name:

Last name:

Submit

Submit to another page

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

唯一的解决方案我发现工作是这样的:(但我认为使用它有点难看)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

很简单,您可以在不同的提交按钮上更改表单的操作单击 .

在document.Ready中试试这个

$(".acceptOffer").click(function () {

$("form").attr("action", "/Managers/SubdomainTransactions");

});

$(".declineOffer").click(function () {

$("form").attr("action", "/Sales/SubdomainTransactions");

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值