======================================================
注:本文源代码点此下载
======================================================
一个朋友问了我一个问题,颇有意思,问题是这样的,一个页面上有一个服务器控件的button,为什么在page_load里加上了button1.attributes["onclick"]="javascript:return window.confirm('请确定输入无误?');";却弹不出确认对话框。
因为是在msn上交流的,我给他测试了一下,语句没有一点问题,还以为是.net framework出了问题。不过一想这主要是用javascript,问题不应该出在framework上。
button服务器控件发送到客户端后的html标记为
上面那条语句的原理也就是发送到客户端后在input标记中加入onclick="javascript:return window.confirm('请确定输入无误?');"以弹出确认对话框
我让他通过“查看源文件”,得到了发送到客户端的button标记
发现其中有两个onclick事件,仔细一问把原因搞清楚了.他在页面上还有一个requiredfieldvalidator,而requiredfieldvalidator的原理也是给所有causesvalidation="true"的button加上
onclick="if (typeof(page_clientvalidate) == 'function') page_clientvalidate(); "
因此,出现了两个onclick,ie只响应了第一个onclick。如果把button设为causesvalidation="false",确认对话框就可以弹出来了。
现在问题变成了在一个带有requiredfieldvalidator的页面上,怎么让causesvalidation="true"的按钮弹出确认对话框
我做了第一次尝试,在一个新的页面,用下面的语句测试
button2.attributes["onclick"]="alert('sure!');";
button2.attributes["onclick"]+="javascript:return window.confirm('请确定输入无误?');";
发送到客户端后为
也就是两个onclick语句合到了一起,正常显示
但是,我想用相应的方法时加到button1时
button1.attributes["onclick"]+="javascript:return window.confirm('请确定输入无误?');";
很遗憾,还是出现两个onclick,这么做还是不行。我想这可能是requiredfieldvalidator的特殊机制吧。
又仔细看了一下requiredfieldvalidator控件的原理,在一个含有requiredfieldvalidator控件的页面上,requiredfieldvalidator控件发送到客户端后生成一些javascript函数,causesvalidation="true"的button只比causesvalidation="false"的button多了一句onclick="if (typeof(page_clientvalidate) == 'function') page_clientvalidate(); ",即调用相应的javacript代码在客户端验证,明白了这点
我又做了如下修改
把button1设causesvalidation="false",在page_load里
button1.attributes["onclick"]="javascript:if (typeof(page_clientvalidate) == 'function') page_clientvalidate();return window.confirm('请确定输入无误?');";
这一次成功了,既弹出了确认对话框,也进行了requiredfieldvalidator的验证
不过这样的话每次都要弹出确认对话框,我想进一步改进,让它先进行requiredfieldvalidator的验证,如果通过,再弹出对话框,又稍稍做了如下修改
button1.attributes["onclick"]="javascript:if (typeof(page_clientvalidate) == 'function') page_clientvalidate();if(page_clientvalidate()) return window.confirm('请确定输入无误?');";
各位兄弟可以试试,看看还有什么更好的办法:)
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/