提交表单时的确认提示

3

我希望在用户提交表单之前得到确认。这可以防止意外地POST表单,可能是不完整或不正确的。

这是我的表单元素:

<form action="manager.php?method=update&id=<?php echo $user->id;?>" onsubmit="return confirm_update();"  method="POST" id="user_update"> 

这里调用了我的函数 confirm_update()

function confirm_update()
{
  if(confirm("Do you wish to update details?"))
  {
    return 0;
  }
  else
  {
    return 1;
  }
}

脚本的问题在于,如果用户在JavaScript提示框中点击“取消”,它不能阻止表单提交。
如何更正此问题,以使用户不会意外提交其表单?
这是我试图实现的功能的完整描述:
用例 - “更新详细信息”
- 用户进入更新页面 - 用户在表单字段中输入详细信息 - 用户点击提交按钮 - 确认消息出现 - 如果选择“确定”按钮,则继续提交表单 - 否则取消操作并留在当前页面
5个回答

10

不要返回0和1,改为返回truefalse。你可以缩短函数为:

function confirm_update() {
    return confirm("Are you sure you want to submit?");
}

刚在我的电脑上检查了上面的代码片段。适用于FF9和Chrome。 - Rohan Prabhu

2
你做反了!
if(confirm("Do you wish to update details?"))
{
    return 1;
}
else
{
    return 0;
}

话虽如此,您的代码可以缩短为一行:

return confirm("Hit OK to continue, Cancel to... cancel.");

1

我会默认返回false的onclick,这对我很有效

<form action="manager.php?method=update&id=<?php echo $user->id;?>"  method="POST" id="user_update"> 
<input type='submit' onclick="return confirm('Do you wish to update details?');return false;"/>
</form>

1
尝试:

function confirm_update() {
    if(confirm("您是否希望更新详细信息?")) {
        return true;
    }
    else {
        return false;
    }
}


1
首先,你应该重新考虑你的方法。你不应该问用户是否想要提交一个可能不完整或无效的表单,而是应该使用JavaScript来防止这种情况发生,即使用JS执行客户端验证。你现在所做的本质上是通过点击提交按钮来完成的...
但是如果你想保持你的方法,你必须防止提交按钮实际上将数据提交到指定的操作,例如通过JavaScript将表单操作更改为“#”,然后在使用你的JS代码时触发提交,例如通过使用XmlHttpRequest。

谢谢您的回答,mahok。但是这种方法行不通,因为表单字段已经从数据库中检索出详细信息,所以验证总是返回 true,例如在电子邮件字段中存在电子邮件地址。这个表单允许他们在数据库中更改其详细信息 :) - tomaytotomato
想象一下,你注册了一个服务,但你的用户名已经被占用了。你可能不知道,也可能输入了有效的用户名,但每次提交表单时,你会被返回到表单中,并收到名字已被使用的通知。不仅每次这种情况发生时你都必须提交表单,更糟糕的是它会问你是否要提交数据... 相反,你可以在 onBlur 或 onChange 事件触发时检查数据是否仍然有效,然后呈现出数据的初步验证。 - dbrumann
从用户的角度来看待这个问题。你点击提交按钮,是因为你想要数据被传输。只有在数据明显缺失或无效时才应该进行干预。否则,你只会拖慢一个已经不受欢迎的过程(重新阅读表单并更改不正确的值),这将像我之前的注册示例一样很快变得令人烦恼。 - dbrumann

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