当一个网页中既有数据验证控件,又有一个按钮在点击时出现提示按钮。 如果直接在页面的后台代码的Page_Load函数中写入btn.Attributes["Onclick"] = "return confirm('确定要保存数据?')",那么验证控件就会失效,因为验证控件也是通过js实现的,这样的话return confirm('确定要保存数据?')先于原来的js代码执行,提前返回了,于是验证控件失去了作用。 Html生成的源码如下: <input type="submit" name="ctl00$ContentPlaceHolder1$bt_save" value="保存数据" onclick="return confirm('确定要保存数据吗?');WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$bt_save", "", true, "", "", false, false))" id="ctl00_ContentPlaceHolder1_bt_save" /> 一开始我错认为把return去掉就可以了,后来发现这样是不行的,原因是没有return的值,确认框也就没有了作用,不管是确定还是取消,都会执行后台代码。 然后我们重新分析一下,这几段代码的实现。 1.我们在后台中加入的Onlick事件的代码默认加到数据验证js方法的前面。 2.我们需要confirm的return值。 3.不能在验证控件的js方法调用前返回。 第2,3条已经没有办法改变了,只能在第一条上突破,于是我将Html中生成的验证控件js方法的调用代码也加到后台中,并且放到return confirm()之前,这样就能保证我们的功能了: 后台代码如下:t_save.Attributes["OnClick"] = "WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions('ctl00$ContentPlaceHolder1$bt_save', '', true, '', '', false, false));return confirm('保存吗?')" ; (注意此处必须将html中的"都替换为 ‘ ); 这样做之后,html生成的代码变成了: <input type="submit" name="ctl00$ContentPlaceHolder1$bt_save" value="保存数据" onclick="WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions('ctl00$ContentPlaceHolder1$bt_save', '', true, '', '', false, false));return confirm('保存吗?');WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$bt_save", "", true, "", "", false, false))" id="ctl00_ContentPlaceHolder1_bt_save" /> 显然验证控件js方法调用了两次,但在第二次之前我们就已经return 了,所以没关系; 以上是我在很无奈的时候想到的办法,如果有哪位高人还有其他好的解决方案,希望多多指教