2012-02-01 100 views
3

我想在提交表单之前获得用户的确认。这将防止意外发布表单,这可能是不完整或不正确的。提交表单确认

这里是我的表单元素:

<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; 
    } 
} 

的脚本的问题是,它并不能阻止形式可以发布,如果用户在点击Cancel JavaScript提示。

如何解决此问题,以免用户意外提交表单?

这里的功能,我想实现的完整描述:

使用案例 - “更新详细信息”

  • 用户去更新页面
  • 用户输入信息的形式字段
  • 用户点击提交按钮
  • 确认消息出现
  • 如果选择“确定”按钮继续提交表单
  • 否则取消行动,并保持
  • 当前页面

回答

10

,而不是返回0和1对,返回truefalse。实际上,你可以缩短功能:

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

刚才检查上面的代码片段在我的机器上。适用于FF9,Chrome。 – 2012-02-01 11:10:38

1

尝试:

 

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

我会做一个onclick返回默认为false,这对我的作品

<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

你应该首先重新考虑你的方法。与其询问用户是否要提交可能不完整或无效的表单,您应该使用javascript来防止发生这种情况,即使用js执行客户端验证。你正在做的事情本质上是通过点击提交...

如果你想保持你的方法,你必须防止提交按钮实际上提交数据到指定的动作,例如通过改变表单动作为“#”通过JavaScript,然后触发提交如果确定是与您的js代码点击,例如通过使用XmlHttpRequest。

+0

感谢mahok,但是这不会工作,因为它们是从数据库中检索出来的,因为这些字段已经具有其中的细节。因此验证会一直回到例如因为在电子邮件地址字段中有一个电子邮件地址。这种形式可以让他们在数据库上更改他们的详细信息:) – kaleeway 2012-02-01 11:14:02

+0

想象一下,您注册了一项服务,但您的用户名已被占用。您可能不知道,并且您可能输入了有效的用户名,但在每次提交时,您都会返回到表单中,并通知您已取得您的姓名。每次发生这种情况时,您不仅需要提交表单,更重要的是会询问您是否要提交数据...如果数据仍然有效,您可以检查blur或onChange,然后提供初步验证数据。 – dbrumann 2012-02-01 11:29:32

+0

从用户的角度来看这一点。您点击提交,因为您想要传输数据。只有(如果)数据明显缺失或无效,您才应该进行干预。否则,你只需放慢一个已经不需要的进程(再次读取表单并更改不正确的值),这与我之前的注册示例一样,会很快变得烦人。 – dbrumann 2012-02-01 11:36:35

2

你这样做是相反的!

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

说了这么多,你的代码可以被缩短到只有一行:

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