分离指向不同 URL 的表单提交按钮

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 提供适用于您旅程各个阶段的云产品。立即开始使用 价值 200 美元的免费积分!

前几天遇到了这个问题。我忘了在哪里,但我把它记在我的小笔记本上了,准备写成博客文章。我把它写下来是因为我听到的处理方式太复杂了。

假设您有一个这样的表单

<form action="/submit">
  
  <!-- inputs and stuff -->

  <input type="submit" value="Submit">

</form>

提交该表单时,它将转到 URL `/submit`。假设您需要另一个提交按钮,该按钮提交到不同的 URL。为什么并不重要。总是会有原因的。互联网是一个很大的地方,等等。

我在网上搜索了人们处理这个问题的其他方法。

一种方法是放弃提交到不同的 URL,而是为每个提交按钮提供一个共享的 name,但使用不同的 value,然后在处理时检查该值以执行不同的操作。

<input type="submit" name="action" value="Value-1">
<input type="submit" name="action" value="Value-2">

您可以在处理过程中读取该值,并在需要时进行重定向。但这只是对所述问题的解决方法。

另一种方法是使用 JavaScript 在点击按钮时更改 <form> 的操作。有很多方法可以做到这一点,但归根结底是

<form name="form">

  <!-- inputs and stuff -->

  <input type="submit" onclick="javascript: form.action='/submit';">
  <input type="submit" onclick="javascript: form.action='/submit-2';"> 

</form>

这当然依赖于 JavaScript,这并不是什么大问题,但与它本可以实现的渐进增强友好性并不一致。

正确答案(如果我可以这么大胆地说)是 HTML 已经为您解决了这个问题。也许它不像它应该的那样广为人知。所以才有了这篇文章,我想。

这一切都与 formaction 属性有关,您可以将其直接放在提交按钮上,它会覆盖表单本身的 action

<form action="/submit">
  
  <input type="submit" value="Submit">
  
  <input type="submit" value="Go Elsewhere" formaction="/elsewhere">
  
</form>

就这样。继续。