带有两个按钮的表单以不同的值提交

Posted

技术标签:

【中文标题】带有两个按钮的表单以不同的值提交【英文标题】:Form with two button submit with different value 【发布时间】:2012-02-21 16:27:39 【问题描述】:
<form action="here.php" method="POST">
<input type="text" name="text">

<div id="one">
   <input type="hidden" name="aaa" value="one">
   <input type="submit" value="Send">
</div>

<div id="two">
   <input type="hidden" name="aaa" value="two">
   <input type="submit" value="Send">
</div>

</form>

现在如果我点击发送 div ONE 或 div 2 我总是在 $_POST['aaa'] = 'two';

是否可以用两个不同的值提交一个表单?

如果我点击 div 一个提交,我希望收到 $_POST['aaa'] = 'one',如果我点击 div 两个提交,我希望收到 $_POST[ 'aaa'] = '两个'.

我该怎么做?

我可以用这个 PHP 和 jQuery。

编辑: 我不想创建两个表单 - 我不想多次显示两个 &lt;input type="text" name="text"&gt;

编辑:也许我可以改为按钮提交?但是怎么做?

【问题讨论】:

【参考方案1】:

看来你真正想做的是在每个按钮中都有一个值,见this,例如:

<form action="demo_form.asp" method="get">
  Choose your favorite subject:
  <button name="subject" type="submit" value="fav_html">HTML</button>
  <button name="subject" type="submit" value="fav_CSS">CSS</button>
</form>

【讨论】:

通常建议在此处包含答案,而不仅仅是一个链接,以防链接不再有效(就像我现在一样)。【参考方案2】:

你需要两种不同的形式:

<div id="one">
   <form ...>
      <input type="hidden" name="aaa" value="one">
      <input type="submit" value="Send">
   </form>
</div>

<div id="two">
    <form ...>
       <input ...>
       <input ...>
    </form>
</div>

标准做法是,当两个字段具有完全相同的name 时,仅使用表单中遇到的 LAST 值并提交。

PHP 确实有一个特殊的表示法 (name="aaa[]") 允许提交多个具有相同名称的值,但这在这里对您没有帮助,因为它会提交所有 aaa 值,而不仅仅是最靠近提交按钮的那个。


HTML 表单:

<form ...>
<input type="text" name="textfield">

<div id="one">
   <input type="hidden" name="one_data" value="aaa" />
   <input type="submit" name="submit_one" value="Submit" />
</div>

<div id="two">
   <input type="hidden" name="two_data" value="bbb" />
   <input type="submit" name="submit_two" value="Submit" />
</div>
</form>

服务器端:

if (isset($_POST['submit_two'])) 
    $data = $_POST['two_data'];
 else if (isset($_POST['submit_one'])) 
    $data = $_POST['one_data'];
 else 
    die("Invalid submission");

【讨论】:

这没关系,但我不想在我的页面上显示两次 在提交时,您总是可以使用一些 javascript 将一个输入字段的值复制到两个表单中的另一个隐藏字段中。但是由于您的表单现在是结构化的,所以没有办法解决这个问题。您还可以使用其他技巧,例如为每个字段指定唯一名称,并使用该事实来检测单击了哪个提交按钮,然后仅访问适当的值。 感谢编辑 (+1),但是如果这个提交按钮是例如 20 怎么办?我必须单独检查一下吗? 您的意思是 20 个不同的提交按钮?哎呀,是的,你必须检查每一个。【参考方案3】:

您可以显示一个带有两个选项和一个提交按钮的单选列表,而不是显示两个提交按钮。

【讨论】:

【参考方案4】:

试试这个:

在html中-

    <input id="PreviousButton" value="Previous" type="submit" />
    <input id="NextButton" value="Next" type="submit" />

    <input id="Button" name="btnSubmit"  type="hidden" />

在欢乐中-

        $("#PreviousButton").click(function () 
            $("#Button").val("Previous");
        );

        $("#NextButton").click(function () 
            $("#Button").val("Next");
        );

然后您可以在表单结果中看到“按钮”包含的内容。

【讨论】:

以上是关于带有两个按钮的表单以不同的值提交的主要内容,如果未能解决你的问题,请参考以下文章

HTML提交按钮:不同的值/按钮文本?

带有两个提交按钮的 Django 表单。 . .一个需要字段,一个不需要

带有两个提交按钮和两个“目标”属性的 HTML 表单

jQuery Validation - 一个 asp.net 表单上的多个提交按钮,不同的验证组?

Django request.POST 不包含提交表单的按钮的名称

Django为表单中的两个提交按钮呈现不同的模板