有一个PHP生成的HTML 4过渡页面,用于编辑单个记录的数据库中的数据。用户有两个选项:存储更改或删除记录。我使用带控件的表单(其中一些是隐藏的):
<form method="post" action="object_mod.php"><!-- this is another file -->
<!-- inputs follow -->
因为我想处理两个动作,即。删除或保存记录我在表单上放了两个提交按钮,在</FORM>
标记之前:
<input type="submit" id="btnSubmit" value="Save">
<input type="submit" id="btnDelete" value="Delete">
</form>
由于用户应确认删除,因此我添加了以下onclick
事件:
<input type="submit" id="btnDelete" value="Delete" onclick="javascript:deleteRecordConfirm();">
(我也试过没有javascript:
和onclick="javascript:deleteRecordConfirm(); return true;"
),但它没有提交表单。
JS函数是
function deleteRecordConfirm(){
if(confirm('Are you sure to delete?')){
document.getElementById("field_action").value=-1;
//document.forms[0].submit();
return true;
}
}
这个field_action
设置为-1所以我在object_mod.php中知道我想删除记录而不是保存它。
这里有问题,为什么这个表单在删除时没有提交?
我认为,如果用户已禁用Javascript以提交表单,即使没有确认也是如此,这就是我使用<INPUT TYPE="submit">
进行删除的原因。这是个好主意吗?我正在考虑提供两个独立的表单(实际上删除应该只有一个带有记录ID的隐藏字段)和自己的提交按钮,一个用于删除,另一个用于保存。
事实上,该页面将在某种内联网中运行,我信任的用户,我不怕黑客或其他东西,但也欢迎任何安全评论。
(我在Firefox 19.0上测试过,Javascript控制台显示没有错误,w3c验证器说这是一个有效页面。)
答案 0 :(得分:2)
表格应根据您的代码提交。我发现的唯一事情是你应该用/>
终止输入标签。
但是......这样,即使取消确认,也会提交表格。使用form.onsubmit
处理程序,如果返回false,表单将不会提交。
我不认为@ B3aT的答案是正确的,因为不是无条件地说“外化”的最佳方式。许多最简单的是最好的。
答案 1 :(得分:1)
我认为最好的办法是“外化”实际的表格发布。
//制作常规按钮(不提交)
//调用自己的函数(保存并删除)
//完成逻辑后document.forms["myform"].submit();
另一个解决方案是添加一个名为“delete”的复选框,并将“save”按钮重命名为“Done or do”。在服务器端,如果激活“删除”,则..删除它。
通常“删除”是“每个条目”级别(同一个用户有多个记录),因此您必须创建一个单独的按钮/链接并最终执行ajax请求/访问带有?delete = 1&amp;的URL。 ID = 3。
您需要自定义是/否窗口或使用jQuery插件,唯一的浏览器标准是“确认”。
答案 2 :(得分:0)
好的,它有效,这实际上是非常愚蠢的错误。问题出在这个按钮上,因为它在表格之外。我非常肯定我有内容,我没有审查PHP代码,但是从脚本而不是HTML输出中复制了所有内容。
正如我所理解的那样,document.forms[0].submit();
行正常工作但不是因为提交表单的按钮而是document.form[0]
对象本身。
感谢您的所有答案。我将尝试从Marcell那里得到form.onsubmit
提示。