我有一个网站,我希望有两个单独的提交按钮,其中一个将输入数据并进行一些计算以显示在同一屏幕上。我已经成功地使用了这个:
<form id="form1" name="form1" method="post" onsubmit="" onreset="" action="programname.php">
<input type="submit" name="calc" value="Find Angle">
然后我用:
if (!isset($_POST['submit'])){
Do actions, display calculations}
现在我想要一个第二个提交按钮,它仍然可以抓取他们输入的数据,然后转到另一个地址。是否有一种优雅的方式来做到这一点?
答案 0 :(得分:46)
您可以在新的提交按钮中添加onclick
方法,该按钮将更改表单的操作,然后提交。
<script type="text/javascript">
function submitForm(action) {
var form = document.getElementById('form1');
form.action = action;
form.submit();
}
</script>
...
<form id="form1">
<!-- ... -->
<input type="button" onclick="submitForm('page1.php')" value="submit 1" />
<input type="button" onclick="submitForm('page2.php')" value="submit 2" />
</form>
答案 1 :(得分:14)
您可以使用formaction =&#34; page1.php&#34;更改表单操作。在按钮属性中。
<form id="form1" name="form1" method="post" onsubmit="" onreset="" action="programname.php">
<input type="submit" name="calc" value="Find Angle">
<input type="button" type="submit" formaction="page1.php">Action 0</button>
<input type="button" type="submit" formaction="page2.php">Action 1</button>
</form>
注意:Internet Explorer 9及更早版本不支持按钮标记的格式属性。
答案 2 :(得分:8)
处理多个提交按钮的最佳方法是在动作脚本中使用 switch case
<form action="demo_form.php" method="get">
Choose your favorite subject:
<button name="subject" type="submit" value="html">HTML</button>
<button name="subject" type="submit" value="css">CSS</button>
<button name="subject" type="submit" value="javascript">Java Script</button>
<button name="subject" type="submit" value="jquery">jQuery</button>
</form>
动作/服务器端脚本:
demo_form.php
<?php
switch($_REQUEST['subject']) {
case 'html': //action for html here
break;
case 'css': //action for css here
break;
case 'javascript': //action for javascript here
break;
case 'jquery': //action for jquery here
break;
}
?>
参考:W3Schools
答案 3 :(得分:0)
另一种方法是,您可以创建并使用一些会话变量来轻松实现它。
例如$ _SESSION ['validate']。
按钮的HTML和PHP代码
<button type="submit" id="first_submit" style="<?php echo isset($_SESSION['validate'])?'display:none':'';?>">first submit</button>
<button type="submit" id="second_submit" style="<?php echo isset($_SESSION['validate'])?'':'display:none';?>">second submit</button>
jquery和ajax脚本
<script>
$(document).ready(function(){
$("#form").on('submit', function(e){
e.preventDefault();
$.ajax({
type: 'POST',
url: 'handler-file.php',
data: new FormData(this),
dataType: "json",
enctype: 'multipart/form-data',
contentType: false,
cache: false,
processData:false,
error:function(error){
//your required code or alert
alert(error.responseText);
},
success: function(response){
if(response.status=='1')
{
//your required code or alert
$('#first_submit').hide();
$('#second_submit').show();
}
else if(response.status=='2')
{
//your required code or alert
$('#first_submit').show();
$('#second_submit').hide();
}
else
{
//your required code or alert
}
}
});
});
});
</script>
处理程序PHP文件
<?php
session_start();
$result['status']='0';
$result['error']='';
if(!isset($_SESSION['validate']))
{
if(!isset($_FILES['file']))
{
$result['error'].='[Er-02 file missing!]';
}
else
{
//your other code
$_SESSION['validate'] = true;
$result['status']='1';
}
}
else if($_SESSION['validate']==true)
{
if(!isset($_FILES['file']))
{
$result['error'].='[Er-03 Validation file missing!]';
}
else
{
//your other code
unset($_SESSION['validate']);
$result['status']='2';
}
}
else
{
$result['error'].='[Er-01 Invalid source!]';
}
echo json_encode($result);
?>
这可能不是最佳或有效的解决方案。我的经验水平不是很高,所以我想出了这个解决方案,该解决方案在所有可用的解决方案都有其局限性之后,才最能达到我的目的。在任何地方都没有,所以想在这里写。
注意:您可能会注意到它还包括其他一些部分,例如响应,成功以及演示文稿,脚本和后端文件之间的错误处理。
希望有帮助!