点击提交表单

时间:2013-02-28 20:32:30

标签: javascript html

有一个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验证器说这是一个有效页面。)

3 个答案:

答案 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提示。