confirm()弹出对话框时,点击“取消”表单仍然提交的解决方法

farryu 2009-09-28 09:24:43
大家在实际工作中用js的时候可能会遇到这种情况:
confirm()弹出的对话框,当用户点击“取消”的时候,表单仍然提交的问题;
一般来说这种问题产生的原因有一下几点:
1:在判断comfirm()为“取消”的时候,我们没有return false;即:
if(!comfirm("确定要提交表单吗?")){
return false;
}
这种情况比较简单,不是我今天谈的重点,只要加入这句话就ok了
2:还有一种情况,当用户点击“取消”的时候,并且已经return false的时候,仍然会提交表单(这是今天的重点)
这种情况一般产生在按钮的onclick()时间中;产生的原因是:
当点击按钮的时候,在弹出confirm()对话框之前,有很多的js需要执行,而大家都知道:点击按钮的时候,表单会自 动 提交的;所以,就没有等到用户点击“取消”按钮,form表单已经提交了,自然就不会管你有没有点击"取消"了;
解决方法:呵呵,相信大家最关心的还是这个,其实知道了原因就很容易解决了:
只要在按钮的onclick()事件的方法前面加一个return 就ok了,这样肯定会先等返回结果在提交表单了:
例:
<input type="button" value="电我吧!" onclick="return method()">
...全文
1648 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
幸运的意外 2009-09-28
  • 打赏
  • 举报
回复
试试 returnValue = false; 看看这句话行不行.
yylovelij 2009-09-28
  • 打赏
  • 举报
回复
lz说的是的,我一般调用这样的js方法时都加了return的
_loehuang_ 2009-09-28
  • 打赏
  • 举报
回复
可以用href呀!
再加一个onclick事件!
在<href="....action" onclick="confirm('.....?')">按钮
如果点击按钮,先弹出确定和取消,无论点击哪个都提交action

可以在onclick中加入return 如下
<href="....action" onclick=" return confirm('.....?')">

这样点击确定提交action,点击取消不提交action!!
li1229363 2009-09-28
  • 打赏
  • 举报
回复
如果说,这个函数是包含在form的submit中的话,做了return就OK。

单独的按钮控件……除非所有按钮都绑定了提交事件,那咱就无话可说了、
iori_wen 2009-09-28
  • 打赏
  • 举报
回复
<input type="submit" value="点我的是猪!" onclick="return confirm('您是头猪?')">
浪尖赏花 2009-09-28
  • 打赏
  • 举报
回复
<input type="button" value="电我吧!" onclick="return method()">
点击这个按钮,表单会自动提交??

不在方法最后显示调用form.submit();怎么提交?不明白了

LZ不会说的是form的onsubmit事件吧
mbh0210 2009-09-28
  • 打赏
  • 举报
回复
sohighthesky 2009-09-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 beenz 的回复:]
有道理..
[/Quote]
.
BeenZ 2009-09-28
  • 打赏
  • 举报
回复
有道理..
jenny0810 2009-09-28
  • 打赏
  • 举报
回复
学习
rjzou2006 2009-09-28
  • 打赏
  • 举报
回复
要加上return
yangpengpneg 2009-09-28
  • 打赏
  • 举报
回复
我想了好久,谢谢了
浴火_凤凰 2009-09-28
  • 打赏
  • 举报
回复
学习了
wangqiubin 2009-09-28
  • 打赏
  • 举报
回复
嗯,是的我也遇到过,谢了
SK_Aqi 2009-09-28
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 benjaminwu198818 的回复:]
不好意思 复制多了个圆括号
C# codeScriptManager.RegisterStartupScript(Button1,this.GetType(),"","new function(){return confirm('are you sure ? ');};",true);

[/Quote]
恩是的没错,哥们你遇到执行click的后半部分代码,怎么处理的?应该不是楼主的一句return 解决的吧?
benjaminwu198818 2009-09-28
  • 打赏
  • 举报
回复
不好意思 复制多了个圆括号
ScriptManager.RegisterStartupScript(Button1, this.GetType(), "", "new function(){return confirm('are you sure ? ');};",true); 

benjaminwu198818 2009-09-28
  • 打赏
  • 举报
回复
这时候不可以使用return,会报js错误,'return' statement outside of function

ScriptManager.RegisterStartupScript(Button1, this.GetType(), "", "new function(){return confirm('are you sure ? '))};",true); 

这样写(利用匿名函数)应该可以
SK_Aqi 2009-09-28
  • 打赏
  • 举报
回复
JavaScript板块没有人了,顶顶吧
SK_Aqi 2009-09-28
  • 打赏
  • 举报
回复
对于楼主的看法,我持有保留意见,我水平有限大家多提出,不知道大家怎么做的?
为了获得正确的答案,不让大家误解,我想大家都来讨论讨论下
我不知道楼主提到的是哪个情况,
1. 首先对于button全部代码需要执行:那么只是注册一句脚本,提前在page_load中注册下就可以了,Button3.Attributes.Add("onclick", "return confirm('are you sure ? ')");
是的,这时候必须加上return
2. 其次对于button前半部分代码执行,弹出confirm后,是否执行后面代码:那么注册一个ScriptClient,
ScriptManager.RegisterStartupScript(Button1, this.GetType(), "testKey", "test()",true);
这时候不可以使用return,会报js错误,'return' statement outside of function
如果实在是需要执行下面的代码怎么做呢?解决的方法还很多:
(1).cs coding,执行后台代码public string test(){}
ScriptManager.RegisterStartupScript(this, this.GetType(), "onclick", "if(confirm('are you sure ? ')){alert(\"<%= test() %>\");

(2).隐藏button的click事件
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), " ", "document.getElementById( ' " + HelpSubmitButton.ClientID + " ').click(); ", true);

(3)貌似还有种方法不太记得了等等吧,也挺简单
上面就是我个人理解的两种情况,第二种有三种解决办法...
就楼主的描述,"这种情况一般产生在按钮的onclick()时间中;产生的原因是"
应该是第二种情况吧,不知道大家和楼主到底是怎么解决的,让大家了解到这种解决方式,
我们没有办法改变button提交,个人觉得只能是confirm中判读是否执行不同情况的代码.
这里我没什么恶意,楼主如果真是这种情况的话,不知道到底怎么解决,毕竟我水平有限...
xiaofan_sap 2009-09-28
  • 打赏
  • 举报
回复
function confirmAct() {
if(confirm('确定要执行此操作吗?'))
{ return true; }
return false; }

记得应该把confirm放在一个函数里才起作用,学习了 呵呵
加载更多回复(1)

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧