大家在实际工作中用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()">
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()">
点击这个按钮,表单会自动提交??不在方法最后显示调用form.submit();怎么提交?不明白了LZ不会说的是form的onsubmit事件吧
再加一个onclick事件!
在<href="....action" onclick="confirm('.....?')">按钮
如果点击按钮,先弹出确定和取消,无论点击哪个都提交action可以在onclick中加入return 如下
<href="....action" onclick=" return confirm('.....?')">这样点击确定提交action,点击取消不提交action!!
---------------------------------------------不是没有等你点击 “取消”。
事实上是有等你点击“取消” 后才提交的。 只是忽略了你点的是哪个
if(confirm('确定要执行此操作吗?'))
{ return true; }
return false; } 记得应该把confirm放在一个函数里才起作用,学习了 呵呵
为了获得正确的答案,不让大家误解,我想大家都来讨论讨论下
我不知道楼主提到的是哪个情况,
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中判读是否执行不同情况的代码.
这里我没什么恶意,楼主如果真是这种情况的话,不知道到底怎么解决,毕竟我水平有限...
ScriptManager.RegisterStartupScript(Button1, this.GetType(), "", "new function(){return confirm('are you sure ? ');};",true);