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

时间:2009-06-03 02:13:18

标签: javascript html forms submit

您好我有一个html< form>。

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

但是,我希望有2个不同的target=""属性,具体取决于您点击哪个按钮提交表单。这可能是一些奇特的javascript,但我不知道从哪里开始。

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

谢谢!

15 个答案:

答案 0 :(得分:75)

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

如果您有多个按钮,例如

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

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

</form>
  

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

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

此方法不需要Javascript。

  

注意:某些浏览器无需按任何按钮即可提交表单(按Enter键)。这是非标准的,   你必须通过明确的default行动来解决这个问题   每当没有按下按钮时激活它。换一种说法,   确保你的表单是明智的(不管是那个   当某人显示有用的错误消息或假设默认值时   命中输入不同的表单元素而不是单击提交   按钮,而不仅仅是打破。

答案 1 :(得分:62)

以表格将默认操作绑定到一个提交按钮,然后绑定到普通按钮的替代操作的心态来解决此问题更为合适。这里的不同之处在于,提交下的任何一个将是当用户通过按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上运行。

答案 2 :(得分:49)

如果您符合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>

答案 3 :(得分:7)

这对我有用:

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

答案 4 :(得分:4)

在此示例中,取自

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

答案 5 :(得分:2)

示例:

<input 
  type="submit" 
  onclick="this.form.action='new_target.php?do=alternative_submit'" 
  value="Alternative Save"
/>

瞧。 非常“花哨”,三个字的JavaScript!

答案 6 :(得分:2)

简单易懂,这将发送已点击的按钮的名称,然后将分支以执行您想要的任何操作。这可以减少对两个目标的需求。少页......!

<form action="twosubmits.php" medthod ="post">
<input type = "text" name="text1">

<input type="submit"  name="scheduled" value="Schedule Emails">
<input type="submit"  name="single" value="Email Now">
</form>

twosubmits.php

<?php
if (empty($_POST['scheduled'])) {
// do whatever or collect values needed
die("You pressed single");
}

if (empty($_POST['single'])) {
// do whatever or collect values needed
die("you pressed scheduled");
}
?>

答案 7 :(得分:1)

这是一个快速示例脚本,显示更改目标类型的表单:

<script type="text/javascript">
    function myTarget(form) {
        for (i = 0; i < form.target_type.length; i++) {
            if (form.target_type[i].checked)
                val = form.target_type[i].value;
        }
        form.target = val;
        return true;
    }
</script>
<form action="" onSubmit="return myTarget(this);">
    <input type="radio" name="target_type" value="_self" checked /> Self <br/>
    <input type="radio" name="target_type" value="_blank" /> Blank <br/>
    <input type="submit">
</form>

答案 8 :(得分:1)

HTML:

<form method="get">
<input type="text" name="id" value="123"/>
<input type="submit" name="action" value="add"/>
<input type="submit" name="action" value="delete"/>
</form>

JS:

$('form').submit(function(ev){ 
ev.preventDefault();
console.log('clicked',ev.originalEvent,ev.originalEvent.explicitOriginalTarget) 
})

http://jsfiddle.net/arzo/unhc3/

答案 9 :(得分:1)

<form id='myForm'>
    <input type="button" name="first_btn" id="first_btn">
    <input type="button" name="second_btn" id="second_btn">
</form>

<script>

$('#first_btn').click(function(){
    var form = document.getElementById("myForm")
    form.action = "https://foo.com";
    form.submit();
});

$('#second_btn').click(function(){
    var form = document.getElementById("myForm")
    form.action = "http://bar.com";
    form.submit();
});

</script>

答案 10 :(得分:1)

它可以在服务器端执行。

<button type="submit" name="signin" value="email_signin" action="/signin">Sign In</button>
<button type="submit" name="signin" value="facebook_signin"  action="/facebook_login">Facebook</button>

并在我的节点服务器端脚本

app.post('/', function(req, res) {
if(req.body.signin == "email_signin"){
            function(email_login) {...} 
        }
if(req.body.signin == "fb_signin"){
            function(fb_login) {...}    


        }
    }); 

答案 11 :(得分:0)

在每个按钮上,您可以拥有以下内容;

<input type="button" name="newWin" onclick="frmSubmitSameWin();">
<input type="button" name="SameWin" onclick="frmSubmitNewWin();">

然后有一些小的js函数;

<script type="text/javascript">
function frmSubmitSameWin() {
form.target = '';
form.submit();
}


function frmSubmitNewWin() {
form.target = '_blank';
form.submit();
}
</script>

这应该可以解决问题。

答案 12 :(得分:0)

让两个按钮都提交到当前页面,然后在顶部添加此代码:

<?php
    if(isset($_GET['firstButtonName'])
        header("Location: first-target.php?var1={$_GET['var1']}&var2={$_GET['var2']}");
    if(isset($_GET['secondButtonName'])
        header("Location: second-target.php?var1={$_GET['var1']}&var2={$_GET['var2']}");
?>

如果您不希望他们看到变量,也可以使用$ _SESSION来完成。

答案 13 :(得分:0)

替代解决方案。不要搞砸onclick,按钮,服务器端和所有。只需创建一个具有不同动作的新表单。

<form method=post name=main onsubmit="return validate()" action="scale_test.html">
<input type=checkbox value="AC Hi-Side Pressure">AC Hi-Side Pressure<br>
<input type=checkbox value="Engine_Speed">Engine Speed<br>
<input type=submit value="Linear Scale" />
</form>
<form method=post name=main1 onsubmit="return v()" action=scale_log.html>
<input type=submit name=log id=log value="Log Scale">
</form>

现在在Javascript中,您可以在getElementsByTagName()的帮助下获取v()中主窗体的所有元素。要知道是否选中了复选框

function v(){
var check = document.getElementsByTagName("input");

    for (var i=0; i < check.length; i++) {
        if (check[i].type == 'checkbox') {
            if (check[i].checked == true) {

        x[i]=check[i].value
            }
        }
    }
console.log(x);
}   

答案 14 :(得分:0)

这可能有助于某人:

使用formtarget属性

<html>
  <body>
    <form>
      <!--submit on a new window-->
      <input type="submit" formatarget="_blank" value="Submit to first" />
      <!--submit on the same window-->
      <input type="submit" formaction="_self" value="Submit to second" />
    </form>
  </body>
</html>