我有一个HTML <form>。
该表格只有一个action=""
属性。
但是,我希望具有两个不同的target=""
属性,具体取决于您单击哪个按钮提交表单。这可能是一些花哨的JavaScript代码,但是我不知道从哪里开始。
如何创建两个按钮,每个按钮提交相同的表单,但是每个按钮为表单提供不同的目标?
我有一个HTML <form>。
该表格只有一个action=""
属性。
但是,我希望具有两个不同的target=""
属性,具体取决于您单击哪个按钮提交表单。这可能是一些花哨的JavaScript代码,但是我不知道从哪里开始。
如何创建两个按钮,每个按钮提交相同的表单,但是每个按钮为表单提供不同的目标?
Answers:
更合适的解决方法是,表单将一个默认操作绑定到一个提交按钮,然后将另一操作绑定到一个普通按钮。此处的区别在于,提交下的任何一个都将是用户通过按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();
}
将代码绑定到提交按钮的click事件的方法不适用于IE。
<input type="submit" formaction="action2.php" value="Other Action"></input>
我在服务器端执行此操作。也就是说,表单始终提交给同一目标,但是我有一个服务器端脚本,该脚本负责根据按下的按钮重定向到适当的位置。
如果您有多个按钮,例如
<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。
注意:某些浏览器能够提交表单而无需按任何按钮(按Enter)。由于这是非标准的,因此您必须通过
default
采取明确的措施并在未按任何按钮时激活它来解决这一问题。换句话说,请确保您的表单在有人点击时执行明智的操作(无论是显示有用的错误消息还是采用默认值),请输入其他表单元素,而不是单击“提交”按钮,而不只是破坏表单。
redirecting to the appropriate location
work for POST too
?假设该位置是一个url,我认为所有数据都消失了……我必须忽略某些东西,否则有人会在过去7年中提到它……@Andrew是什么意思?
如果您使用的是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>
在这个例子中,取自
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');">
简单易懂,这将发送已单击的按钮的名称,然后分支到您要执行的任何操作。这样可以减少对两个目标的需求。更少的页面...!
<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");
}
?>
这是一个快速的示例脚本,它显示更改目标类型的表单:
<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>
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)
})
explicitOriginalTarget
是mozilla专用的扩展程序
<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) {...}
}
});
在每个按钮上,您可以拥有以下内容:
<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>
这应该够了吧。
让两个按钮都提交到当前页面,然后在顶部添加以下代码:
<?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来完成。
替代解决方案。不要被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);
}
这可能会帮助某人:
使用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>