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

IT技术 javascript html forms submit
2021-03-21 19:03:08

我有一个 HTML <form>。

表单只有一个action=""属性。

但是我希望有两个不同的target=""属性,具体取决于您单击哪个按钮来提交表单。这可能是一些花哨的 JavaScript 代码,但我不知道从哪里开始。

我如何创建两个按钮,每个按钮都提交相同的表单,但每个按钮都为表单提供了不同的目标?

6个回答

我在服务器端执行此操作。也就是说,表单总是提交到同一个目标,但我有一个服务器端脚本,负责根据按下的按钮重定向到适当的位置。

如果您有多个按钮,例如

<form action="mypage" method="get">

  <input type="submit" name="retry" value="Retry" />
  <input type="submit" name="abort" value="Abort" />

</form>

注意:我使用了 GET,但它也适用于 POST

然后,您可以轻松确定按下了哪个按钮 - 如果变量retry存在并具有值,则按下重试,如果变量abort存在且具有值,则按下中止。然后可以使用此知识重定向到适当的位置。

此方法不需要 Javascript。

注意:某些浏览器无需按任何按钮(按回车键)即可提交表单。尽管这是非标准的,但您必须通过明确的default操作并在未按下任何按钮时激活该操作来解决这个问题。换句话说,当有人在不同的表单元素中点击输入而不是点击提交按钮时,请确保您的表单做一些合理的事情(无论是显示有用的错误消息还是假设默认值),而不是只是打破。

怎么redirecting to the appropriate location work for POST too办?假设该位置是一个 url,我认为所有数据都消失了……我一定是忽略了某些东西,或者有人在过去 7 年中提到过……这就是 @Andrew 的意思吗?
2021-04-25 19:03:08
行动 = 地点。行动≠目标。w3schools.com/tags/att_a_target.asp
2021-04-26 19:03:08
我不确定是不是因为这个答案已经过去了 7 年,但这种方法对我不起作用(在 Chrome 中测试)
2021-05-04 19:03:08
帖子后的重定向不会将任何额外的表单数据传递到目标 URL。在我给出的简单示例中,这不是问题,因为没有其他表单元素。如果您有其他表单数据,则需要以其他方式将其传递到目的地,例如通过将其转换为查询字符串,或将其传递到带外。对我来说,这种类型的事情的典型场景是有一个“提交”操作和一个“取消”操作(或“转到此处”操作),并且只有后一个操作被重定向。这是另一种方式它不用担心 POST 数据。
2021-05-07 19:03:08
这应该像 7 年前那样工作。您不再需要担心底部的注释。
2021-05-18 19:03:08

用这样的心态来解决这个问题更合适,即表单将具有绑定到一个提交按钮的默认操作,然后绑定到一个普通按钮的替代操作。这里的区别在于,提交下的任何一个都将是用户通过按 Enter 提交表单时使用的那个,而另一个只会在用户明确单击按钮时被触发。

无论如何,考虑到这一点,应该这样做:

<form id='myform' action='jquery.php' method='GET'>
    <input type='submit' id='btn1' value='Normal Submit'>
    <input type='button' id='btn2' value='New Window'>
</form>

使用这个 javascript:

var form = document.getElementById('myform');
form.onsubmit = function() {
    form.target = '_self';
};

document.getElementById('btn2').onclick = function() {
    form.target = '_blank';
    form.submit();
}

将代码绑定到提交按钮的点击事件的方法不适用于 IE。

经过一些调整,这是最适合我的需求的。谢谢
2021-05-05 19:03:08
从 HTML5 开始,可以使用 <input type="submit" formaction="action2.php" value="Other Action"></input>
2021-05-12 19:03:08

如果您使用的是 HTML5,则可以只使用属性formaction. 这允许您action为每个按钮使用不同的形式

<!DOCTYPE html>
<html>
  <body>
    <form>
      <input type="submit" formaction="firsttarget.php" value="Submit to first" />
      <input type="submit" formaction="secondtarget.php" value="Submit to second" />
    </form>
  </body>
</html>
不错的。您可以通过 jQuery 捕获单击事件并更改表单操作属性以使其与旧浏览器兼容。
2021-04-22 19:03:08
形成≠目标。 formaction是表单提交到的位置(即 URL)。 target是显示表单结果的浏览器选项卡/窗口的名称。
2021-04-23 19:03:08
热的!热的!热的!但是,当我为 html5 修改时,我是否错过了这一点?
2021-04-30 19:03:08

这对我有用:

<input type='submit' name='self' value='This window' onclick='this.form.target="_self";' />

<input type='submit' name='blank' value='New window' onclick='this.form.target="_blank";' />

在这个例子中,取自

http://www.webdeveloper.com/forum/showthread.php?t=75170

您可以在按钮 OnClick 事件上看到更改目标的方式。

function subm(f,newtarget)
{
document.myform.target = newtarget ;
f.submit();
}

<FORM name="myform" method="post" action="" target="" >

<INPUT type="button" name="Submit" value="Submit" onclick="subm(this.form,'_self');">
<INPUT type="button" name="Submit" value="Submit" onclick="subm(this.form,'_blank');">