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

嗨,我有一个HTML <form>。

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

不过,我希望有2个不同的target=""属性取决于你点击哪个button来提交表单。 这可能是一些奇特的JavaScript,但我不知道从哪里开始。

任何想法如何我可以创build两个button,每个提交相同的forms,但每个button给窗体一个不同的目标?

谢谢!

用一种forms将一个提交button绑定到一个默认动作,然后另一个动作绑定到一个普通button的思路来处理这个问题是比较合适的。 这里的区别在于,无论用户提交什么内容,都是用户按下Enter键提交表单时使用的,而另一个只有在用户明确点击button时才会被触发。

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

 <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(); } 

将代码绑定到提交button的单击事件的方法在IE上不起作用。

我在服务器端做这个。 也就是说,表单总是提交给同一个目标,但是我有一个服务器端脚本负责根据按下的buttonredirect到合适的位置。

如果你有多个button,比如

 <form action="mypage" method="get"> <input type="submit" name="retry" value="Retry" /> <input type="submit" name="abort" value="Abort" /> </form> 

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

然后,你可以很容易地确定哪个button被按下 – 如果variablesretry存在,并有一个值然后重试被按下,如果variablesabort存在,并有一个值,然后中止被按下。 这些知识可以用来redirect到适当的地方。

这个方法不需要Javascript。

注意:某些浏览器可以在不按任何button的情况下提交表单(按回车键)。 这是非标准的,你必须通过明确的default行动来解决这个问题,并且在没有button被按下时激活它。 换句话说,确保你的表单做了一些合理的事情 (不pipe是显示一个有用的错误信息还是默认的),当有人点击进入不同的表单元素而不是点击一个提交button,而不仅仅是打破。

如果您使用HTML5,则可以使用属性formaction

 <!DOCTYPE html> <html> <body> <form> <input type="submit" formaction="firsttarget" value="Submit to first" /> <input type="submit" formaction="secondtarget" value="Submit to second" /> </form> </body> </html> 

这适用于我:

 <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

您可以看到更改buttonOnClick事件上的目标的方法。

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

以下是一个简单的示例脚本,其中显示了一个更改目标types的表单:

 <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> 

例:

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

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

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/

简单易懂,这将发送已点击的button的名称,然后将分支做任何你想要的。 这可以减less两个目标的需要。 less页…!

 <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"); } ?> 
 <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> 

它在服务器端是可行的。

 <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) {...} } }); 

在你的每个button上,你可以有以下的;

 <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> 

这应该够了吧。

将两个button提交到当前页面,然后在顶部添加此代码:

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

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

替代解决scheme。 不要弄乱onclick,button,服务器端和所有。只是创build一个新的forms,像这样的不同的行动。

 <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()中所有主窗体的元素。 要知道checkbox是否被选中

 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); }