首页 文章

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

提问于
浏览
416

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

18 回答

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

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

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

    有一个新的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 <9且禁用Javascript .

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

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

  • 0

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

  • 343
    <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>
    
  • 0

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

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

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

  • 4

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

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

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

  • -1

    处理多个提交按钮的最佳方法是在服务器脚本中使用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

  • 11

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

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

    您可以像这样显示按钮:

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

  • 0

    既然你没有指定你正在使用的服务器端脚本方法,我会给你一个适用于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
    
  • 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),您可以将“row”作为数组读取以获取索引:

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

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

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

  • 75

    这非常容易测试

    <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页面中,单击按钮,然后查看URL

  • 2

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

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

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

  • 743

    使用格式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>
    
  • 26

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

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

    在document.Ready中试试这个

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

相关问题