如何在使用JavaScript form.submit()提交表单时获取提交按钮的POST数据

4

假设我有这个表单和脚本:

<SCRIPT LANGUAGE="JavaScript">
function handleSubmit() {   
    return false;  
 }   
function Delete(element) {  
var is_confirmed = confirm("Delete this record? \n" + title + " " + date);  
if (is_confirmed) {         
    document.getElementById("Novinky").submit();
}
}
</SCRIPT> 

<form  action="index.php" method="post" id="Novinky" onsubmit="return handleSubmit();"> 
<input onclick="Delete(this)" value="Smazat" name="delete[12]" type="submit" />
</form> 

有办法将提交按钮数据(delete[] -> Smazat)添加到POST请求中吗?

将您的<input type="button">设置为可以使用onclick。 - Treby
它无论如何都能工作。我选择提交按钮,这样即使禁用了JavaScript也能正常工作。 - Jakub Stejskal
3个回答

2

看起来您正在提交一个与包含“删除”按钮(id=Novinky)不同的表单。在这种情况下,您可以在此表单中添加一个隐藏字段,并在提交之前将其值设置为“删除”按钮的值:

if (is_confirmed) {                     
    document.getElementById('myhiddenfield').value = element.value;
    document.getElementById('Novinky').submit();
}

更新:

不必给删除按钮附加点击处理程序,您可以这样做:

<script type="text/javascript">
function handleSubmit() {   
    return confirm('Delete this record?');  
}   
</script> 

<form  action="index.php" method="post" id="Novinky" onsubmit="return handleSubmit();"> 
    <input value="Smazat" name="delete[12]" type="submit" />
</form>

当您提交时,这将自动发布删除按钮的值。


更新2:

<script type="text/javascript">
function handleSubmit() {
    // check which button was clicked:
    alert(window.clicked);
    return confirm('Delete this record?');
}
</script>

<form  action="index.php" method="post" id="Novinky" onsubmit="return handleSubmit();">         
    <input onclick="window.clicked=this.value;" value="Smazat" name="delete[12]" type="submit" />
</form>

我的错...在简化示例时,我不小心删除了表单的ID;) 我想避免使用任何额外的隐藏字段...我在想是否可以修改submit()的功能或设置按钮为POSTed... - Jakub Stejskal
只要表单中没有不同的提交按钮(例如编辑、保存等),这就可以正常工作。但我的情况并非如此(抱歉,我应该把这一点说明清楚……我想我已经过于简化了这个例子 :))。 - Jakub Stejskal
即使您有其他提交按钮,只有您单击的按钮的值将被发布,这将允许您在服务器端脚本中确定它。 - Darin Dimitrov
我指出的事实是,您仍将获得确认对话框... 我想不出任何方法让handleSubmit()知道哪个按钮被点击了,而不使用单击处理程序和隐藏字段... 有什么想法吗? - Jakub Stejskal
好的,我猜那就是一个答案 :-) 非常感谢你;-) 还有一个问题.. 你在handleSubmit()函数中说的"el"参数是什么意思? - Jakub Stejskal
这是一个打字错误,我已经删除了它 :-) - Darin Dimitrov

1
我刚发现这段代码可以解决问题:
<SCRIPT LANGUAGE="JavaScript">
function Delete(element) {  
var is_confirmed = confirm("Delete this record? \n" + title + " " + date);  
return is_confirmed;    
}
</SCRIPT> 

<form  action="index.php" method="post" onsubmit="return handleSubmit();"> 
<input onclick="return Delete(this)" value="Smazat" name="delete[12]" type="submit" />
</form>

然而,我仍然很感兴趣是否有答案回答我的原始问题


0

JavaScript

document.cookie = "button="+element.value+";path=/<path of php file>; domain="+window.location.hostname+";";

PHP

<? echo $_COOKIE["button"]; ?>

请确保提供 PHP 路径。或者只需设置当前页面的路径。
例如:path=/sample 不要包括 PHP 页面。

抱歉,我无法看到alert()与发送的POST请求有任何关系。:/ - Jakub Stejskal
这是一个有趣的解决方案,但我的观点是使脚本的行为与禁用 JavaScript 的表单相同,因此表单可以在有或没有 JavaScript 的情况下都能正常工作,并且不必在服务器端单独处理... 因此需要进行 POST 请求。 - Jakub Stejskal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接