题
我有两个提交的形式的按钮。我如何确定哪一个被击中的服务器端?
解决方案
如果你给每一个的名称,被点击的一个将被通过发送作为任何其他输入。
<input type="submit" name="button_1" value="Click me">
其他提示
您可以给每个输入一个不同的值,并保持相同的名称:
<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!
}
与唯一的问题是你配合你的逻辑输入中的文本。你也可以给每一个唯一的名称,只是检查$ _ 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
}
这是更好的解决方案包括使用按钮标签提交表单的:
<form>
...
<button type="submit" name="action" value="update">Update</button>
<button type="submit" name="action" value="delete">Delete</button>
</form>
此方式存在与国际化和多显示语言没有不便(在前一溶液中,按钮的标签也被发送到该服务器的值)。
有一个新的HTML5方法于此,formaction
属性:
<button type="submit" formaction="/action_one">First action</button>
<button type="submit" formaction="/action_two">Second action</button>
显然,这并不在IE9和更早,但对于其他浏览器,你应该罚款(参见: w3schools.com HTML <按钮> formaction属性)。
我个人一般使用Javascript来使用这种方法作为备用远程提交表格(更快的感知反馈)。在这两者之间,未覆盖的唯一人IE <9禁用JavaScript。
当然,这可能是不适当的,如果你基本上采取同样的行动服务器端不论哪个按钮被按下,但通常如果有两个可用的用户端操作那么他们将映射两个服务器端操作为好。
修改强>
正如Pascal_dher在评论所指出的,该属性也可在<input>
标签以及
这是非常容易的测试
<form action="" method="get">
<input type="submit" name="sb" value="One">
<input type="submit" name="sb" value="Two">
<input type="submit" name="sb" value="Three">
</form>
只是把在一个HTML页面中,单击按钮,并期待在网址
<form>
<input type="submit" value="Submit to a" formaction="/submit/a">
<input type="submit" value="submit to b" formaction="/submit/b">
</form>
也许建议的解决方案在这里工作09年,但香港专业教育学院测试的所有这upvoted答案,没有人工作在任何浏览器。
唯一的解决方案,我发现工作是这样的:(但其有点难看使用我觉得)
<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';"/>
使用formaction
HTML属性(第五行):
<form action="/action_page.php" method="get">
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
<button type="submit">Submit</button><br>
<button type="submit" formaction="/action_page2.php">Submit to another page</button>
</form>
要处理多个提交按钮被在服务器脚本中使用开关盒的最佳方式
<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">Java Script</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
由于没有指定您所使用的服务器端脚本方法,我给你使用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
定义name
作为array
。
<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
非常重要的,因为两者会如果不进行解析。
享受。
<form method="post">
<input type="hidden" name="id" value="'.$id.'" readonly="readonly"/>'; //any value to post PHP
<input type='submit' name='update' value='update' formAction='updateCars.php'/>
<input type='submit' name='delete' value='delete' formAction='sqlDelete.php'/>
</form>
我想你应该能够阅读您的GET数组名称/值。我认为,这不是不会点击的按钮出现在列表中。
简单,你可以改变形式的不同的提交按钮点击动作。
在的document.ready尝试此
$(".acceptOffer").click(function () {
$("form").attr("action", "/Managers/SubdomainTransactions");
});
$(".declineOffer").click(function () {
$("form").attr("action", "/Sales/SubdomainTransactions");
});
您也可以做这样的(我认为这是非常方便的,如果你有N个输入)。
<input type="submit" name="row[1]" value="something">
<input type="submit" name="row[2]" value="something">
<input type="submit" name="row[3]" value="something">
和然后在服务器侧(在我的例子PHP)可以读取“行”作为阵列来获得索引:
$index = key($_POST['row']);
$ _ POST [ '行']将与仅一个元件的阵列,在形式指数=>值(例如: '2'=>“的东西“)。
您也可以使用href属性和发送与附加的用于每个按钮的值的获取。但将不需要的形式然后
href="/SubmitForm?action=delete"
href="/SubmitForm?action=save"
如果您有两个不同的功能提交按钮,然后明确告诉在输入按钮与提交类型,如:
<input type="submit" click="save()" name="saveBtn" value="save">
<input type="submit" click="update()" name="updateBtn" value="update">
您不必担心哪个按钮被称为服务器端。分开写的每个函数你的逻辑和调用它们。他们会做好自己的工作而不打扰别人。
可以呈现按钮这样的:
<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一些其他值I从我离开的用于说明的形式提取)