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

时间:2009-02-13 21:47:04

标签: html forms submit

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

21 个答案:

答案 0 :(得分:786)

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

<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
}

答案 1 :(得分:372)

如果你给每个人一个名字,那么点击的名字将作为任何其他输入发送。

<input type="submit" name="button_1" value="Click me">

答案 2 :(得分:90)

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

<form>
    ...
    <button type="submit" name="action" value="update">Update</button>
    <button type="submit" name="action" value="delete">Delete</button>
</form>

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

答案 3 :(得分:68)

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

<button type="submit" formaction="/action_one">First action</button>
<button type="submit" formaction="/action_two">Second action</button>

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

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

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

修改 正如Pascal_dher在评论中所指出的,此属性也可以在<input>标记上使用。

答案 4 :(得分:26)

这非常容易测试

<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页面,点击按钮,然后查看网址

即可

答案 5 :(得分:19)

<form>
    <input type="submit" value="Submit to a" formaction="/submit/a">
    <input type="submit" value="submit to b" formaction="/submit/b">    
</form>

答案 6 :(得分:11)

也许这里建议的解决方案在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';"/>

答案 7 :(得分:8)

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

<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

答案 8 :(得分:7)

使用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>

答案 9 :(得分:5)

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

<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

答案 10 :(得分:5)

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非常重要,因为两者都会被解析。 享受。

答案 11 :(得分:4)

您为一种形式的多个提交按钮执行操作 例子

 <input type="submit" name="" class="btn action_bg btn-sm loadGif" value="Add Address" title="" formaction="/addAddress"> 
 <input type="submit" name="" class="btn action_bg btn-sm loadGif" value="update Address" title="" formaction="/updateAddress"> 

答案 12 :(得分:3)

<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>

答案 13 :(得分:2)

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

答案 14 :(得分:2)

在不同按钮点击时发送不同表单动作的 HTML 示例:

<form action="/login" method="POST">
        <input type="text" name="username" value="your_username" />
        <input type="password" name="password" value="your_password" />
        <button type="submit">Login</button>
        <button type="submit" formaction="/users" formmethod="POST">Add User</button>
</form>

添加新用户和登录用户使用相同的表单。

答案 15 :(得分:1)

由于您未指定要使用的服务器端脚本编写方法,因此我将为您提供一个适用于PHP的示例

<?php
   if(isset($_POST["loginForm"]))
   {
    print_r ($_POST); // FOR Showing POST DATA
   }
   elseif(isset($_POST["registrationForm"]))
   {
    print_r ($_POST);
   }
   elseif(isset($_POST["saveForm"]))
   {
    print_r ($_POST);
   }
   else{

   }
?>
<html>
<head>
</head>
<body>
  
  <fieldset>
    <legend>FORM-1 with 2 buttons</legend>
      <form method="post" >
      <input type="text" name="loginname" value ="ABC" >

     <!--Always use type="password" for password --> 
     <input type="text" name="loginpassword" value ="abc123" >
     
     <input type="submit" name="loginForm" value="Login"><!--SUBMIT Button 1 -->
     <input type="submit" name="saveForm" value="Save">  <!--SUBMIT Button 2 -->
   </form>
  </fieldset>



  <fieldset>
    <legend>FORM-2 with 1 button</legend>
     <form method="post" >
      <input type="text" name="registrationname" value ="XYZ" >
      
     <!--Always use type="password" for password -->
     <input type="text" name="registrationpassword" value ="xyz123" >
     
     <input type="submit" name="registrationForm" value="Register"> <!--SUBMIT Button 3 -->
   </form>
  </fieldset>
  

</body>
</html>

Forms

When click on Login -> loginForm

When click on Save -> saveForm

When click on Register -> registrationForm

答案 16 :(得分:0)

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

href="/SubmitForm?action=delete"
href="/SubmitForm?action=save"

答案 17 :(得分:0)

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

<input type="submit" click="save()" name="saveBtn" value="save">
<input type="submit" click="update()" name="updateBtn" value="update">

您不必担心在服务器端调用哪个按钮。分别在每个函数中编写逻辑,然后调用它们。他们会在不干扰他人的情况下完成工作。

答案 18 :(得分:0)

您也可以这样做(如果您有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),您可以阅读&#34; row&#34;作为获取索引的数组:

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

$ _ POST [&#39; row&#39;]将是一个只包含一个元素的数组,格式为index =&gt;价值(例如:&#39; 2&#39; =&gt;&#39;某事&#34;)。

http://php.net/manual/en/function.key.php

答案 19 :(得分:0)

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

在document.Ready

中试试
$(".acceptOffer").click(function () {
       $("form").attr("action", "/Managers/SubdomainTransactions");
});

$(".declineOffer").click(function () {
       $("form").attr("action", "/Sales/SubdomainTransactions");
});

答案 20 :(得分:-1)

您可以像这样显示按钮:

<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是我从表格中提取的一些其他值,用于说明)