具有多个“动作”的 HTML 表单

Posted

技术标签:

【中文标题】具有多个“动作”的 HTML 表单【英文标题】:HTML form with multiple "actions" 【发布时间】:2013-05-15 16:09:11 【问题描述】:

我正在设置一个表单,其中我需要两个“操作”(两个按钮):

1 - “提交此表单以供批准” 2 - “保存此应用程序以供以后使用”

如何创建支持多个“动作”的 html 表单?

EG:

<form class="form-horizontal" action="submit_for_approval.php"><form class="form-horizontal" action="save_for_later.php">

我需要将这两个提交选项合并到一个表单中。

我进行了一些基础研究,但找不到关于这是否可能的明确答案,和/或任何解决方法的链接的好资源。

提前致谢。

【问题讨论】:

不是 php 人,但在 .NET 中,我可以只发布到一个表单操作,然后通过查看表单发布数据找出点击了哪个按钮。我假设你可以在 php.ini 中做同样的事情。或者,您只需使用 javascript 来更改提交的目标。 【参考方案1】:

正如@AliK 提到的,这可以通过查看提交按钮的值轻松完成。

当您提交表单时,未设置的变量将评估为 false。如果您将两个提交按钮设置为同一个表单的一部分,您只需检查并查看设置了哪个按钮。

HTML:

PHP

如果($_POST[“保存”]) //用户点击保存按钮,进行相应处理 //你可以做一个else,但我更喜欢单独的语句 如果($_POST[“批准”]) //用户点击提交审批按钮,进行相应处理

编辑


如果你不想改变你的 PHP 设置,试试这个:http://pastebin.com/j0GUF7MV 这是 @AliK 引用的 JavaScript 方法。

相关:

2x submit buttons to action different URL Submit form to another page (which is different from the page used in ACTION)

【讨论】:

嘿,我醒了,你 + AliK 的 JavaScript 答案对我来说似乎很完美,谢谢!!【参考方案2】:

(对我而言)使其成为下一个基础设施的最佳方式:

<form method="POST">
<input type="submit" formaction="default_url_when_press_enter" style="visibility: hidden; display: none;">
<!-- all your inputs -->
<input><input><input>
<!-- all your inputs -->
<button formaction="action1">Action1</button>
<button formaction="action2">Action2</button>
<input type="submit" value="Default Action">
</form>

使用这种结构,您将发送输入方向和其余按钮的无限可能性。

【讨论】:

【参考方案3】:

这真的很有效,因为我正在使用 thymeleaf 制作一张桌子,桌子里面有两个按钮在一个表格中......谢谢,即使这个线程很旧,它仍然对我有很大帮助!

<th:block th:each="infos : $infos">
<tr>
<form method="POST">
<td><input class="admin" type="text" name="firstName" id="firstName" th:value="$infos.firstName"/></td>
<td><input class="admin" type="text" name="lastName" id="lastName" th:value="$infos.lastName"/></td>
<td><input class="admin" type="email" name="email" id="email" th:value="$infos.email"/></td>
<td><input class="admin" type="text" name="passWord" id="passWord" th:value="$infos.passWord"/></td>
<td><input class="admin" type="date" name="birthDate" id="birthDate" th:value="$infos.birthDate"/></td>
<td>
<select class="admin" name="gender" id="gender">
<option><label th:text="$infos.gender"></label></option>
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
</td>
<td><select class="admin" name="status" id="status">
<option><label th:text="$infos.status"></label></option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
</td>
<td><select class="admin" name="ustatus" id="ustatus">
<option><label th:text="$infos.ustatus"></label></option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
</td>
<td><select class="admin" name="type" id="type">
<option><label th:text="$infos.type"></label></option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select></td>
<td><input class="register" id="mobileNumber" type="text" th:value="$infos.mobileNumber" name="mobileNumber" onkeypress="return isNumberKey(event)" maxlength="11"/></td>
<td><input class="table" type="submit" id="submit" name="submit" value="Upd" Style="color: white; background-color:navy; border-color: black;" th:formaction="@/updates"/></td>
<td><input class="table" type="submit" id="submit" name="submit" value="Del" Style="color: white; background-color:navy; border-color: black;" th:formaction="@/delete"/></td>
</form>
</tr>
</th:block>

【讨论】:

【参考方案4】:

这应该可以在不更改后端代码的情况下工作:

<form class="form-horizontal" action="submit_for_approval.php">
  <button>Submit for Approval</button>
  <button formaction="save_for_later.php">Save for Later</button>
</form>

接受的答案对我不起作用,因为我使用的是 Golang,显然默认的 Go 表单返回与空变量相同的缺失变量(作为空字符串)。

【讨论】:

以上是关于具有多个“动作”的 HTML 表单的主要内容,如果未能解决你的问题,请参考以下文章

通过 AJAX 提交多个具有相同名称的 HTML 表单 [重复]

如何使用 Javascript DOM 从具有多个表单的页面获取具有输入类型密码的表单?

HTML表单

php一个表单提交多个页面,怎样获取按钮提交过来的值

如何将 HTML 表单数据作为 JSON 发送到服务器?

没有动作的 HTML 表单