一种形式的两个提交按钮

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


#1楼

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

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

按钮内部的HTML(例如..>Update<..是用户看到的内容;由于提供了HTML,因此该value对用户不可见;仅将其发送到服务器。这种方式不会给用户带来任何不便国际化和多种显示语言(在以前的解决方案中,按钮的标签也是发送到服务器的值)。


#2楼

也许这里建议的解决方案在2009年有效,但ive测试了所有上述建议的答案,没有人在任何浏览器中工作。

我发现可行的唯一解决方案是:(但是我认为使用起来有点难看)

<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';"/>


#3楼

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

在文档中尝试一下。

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

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

#4楼

您可以像这样显示按钮:

<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是我从留给我们说明的表单中提取的其他一些值)


#5楼

有一种新的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)。

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

编辑:正如Pascal_dher在注释中指出的,此属性在<input>标记上也可用。


#6楼

由于您未指定要使用的服务器端脚本编写方法,因此,我将为您提供一个使用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

#7楼

您也可以这样操作(如果您有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/zh/function.key.php


#8楼

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

#9楼

处理多个提交按钮的最佳方法是在服务器脚本中使用切换大小写

<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


#10楼

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

#11楼

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非常重要,因为如果没有解析,则两者都会被解析。 请享用。


#12楼

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

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

#13楼

如果您有两个具有不同功能的提交按钮,则显式告知输入按钮的提交类型,例如:

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

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


#14楼

使用formaction HTML属性(第5行):

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

#15楼

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

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

#16楼

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


#17楼

这非常容易测试

<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


#18楼

解决方案1:
给每个输入一个不同的值并保持相同的名称:

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

这样做的问题是您将逻辑绑定到输入中用户可见的文本。


解决方案2:
给每个人一个唯一的名称,并检查$ _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
}

#19楼

由于您未指定要使用的服务器端脚本编写方法,因此我将为您提供一个适用于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> 

形式

当点击登录-> loginForm

当点击保存-> saveForm

当点击注册-> registrationForm

发布了0 篇原创文章 · 获赞 2 · 访问量 4999

猜你喜欢

转载自blog.csdn.net/asdfgh0077/article/details/104014663
今日推荐