以下是类的定义,当然这个文件是单独保存在一个js文件中
组件类
1Type.registerNamespace("Shenba");
2
3Shenba.ToolTipValidator = function ()
4{
5 // 调用几类Sys.Component的构造方法
6 Shenba.ToolTipValidator.initializeBase(this);
7}
8
9Shenba.ToolTipValidator.prototype = {
10 // validator 对应的验证控件
11 get_validator : function ()
12 {
13 return this._validator;
14 },
15 set_validator : function (value)
16 {
17 this._validator = value;
18 },
19 // 重写几类的方法,在创建时该方法被调用
20 initialize : function ()
21 {
22 var divToolTip = this._createToolTip();
23 this._divToolTip = divToolTip;
24 document.body.appendChild(divToolTip);
25
26 if (typeof(this._validator.evaluationfunction) == "String")
27 {
28 this._validator.evaluationfunction = eval(this._validator.evaluationfunction);
29 }
30
31 // 改写原验证控件的验证方法
32 var evaluationfunction = this._validator.evaluationfunction;
33 this._validator.evaluationfunction = function(val)
34 {
35 if (!evaluationfunction(val))
36 {
37 divToolTip.style.display = "";
38 window.setTimeout(function(){divToolTip.style.display = "none"}, 3000);
39 return false;
40 }
41 else
42 {
43 divToolTip.style.display = "none";
44 return true;
45 }
46 }
47 },
48 // 创建一个div,用于显示错误信息
49 _createToolTip : function ()
50 {
51 var divToolTip = document.createElement("div");
52 divToolTip.id = this.id + "_divToolTip";
53 divToolTip.style.display = "none";
54 divToolTip.style.border = "solid 1px black";
55 divToolTip.innerHTML = this._validator.errormessage;
56 divToolTip.style.backgroundColor = "lightYellow";
57
58 // 设这div的位置 为被验证控件的右边
59 var location = Sys.UI.DomElement.getLocation($get(this._validator.controltovalidate));
60 location.x += $get(this._validator.controltovalidate).offsetWidth + 2;
61 Sys.UI.DomElement.setLocation(divToolTip, location.x, location.y);
62 return divToolTip;
63 },
64 dispose : function ()
65 {
66 this._validator = null;
67 }
68}
69
70// 注册这个类
71Shenba.ToolTipValidator.registerClass("Shenba.ToolTipValidator", Sys.Component);
72
73if (typeof("Sys") !== "undefined") Sys.Application.notifyScriptLoaded();
1Type.registerNamespace("Shenba");
2
3Shenba.ToolTipValidator = function ()
4{
5 // 调用几类Sys.Component的构造方法
6 Shenba.ToolTipValidator.initializeBase(this);
7}
8
9Shenba.ToolTipValidator.prototype = {
10 // validator 对应的验证控件
11 get_validator : function ()
12 {
13 return this._validator;
14 },
15 set_validator : function (value)
16 {
17 this._validator = value;
18 },
19 // 重写几类的方法,在创建时该方法被调用
20 initialize : function ()
21 {
22 var divToolTip = this._createToolTip();
23 this._divToolTip = divToolTip;
24 document.body.appendChild(divToolTip);
25
26 if (typeof(this._validator.evaluationfunction) == "String")
27 {
28 this._validator.evaluationfunction = eval(this._validator.evaluationfunction);
29 }
30
31 // 改写原验证控件的验证方法
32 var evaluationfunction = this._validator.evaluationfunction;
33 this._validator.evaluationfunction = function(val)
34 {
35 if (!evaluationfunction(val))
36 {
37 divToolTip.style.display = "";
38 window.setTimeout(function(){divToolTip.style.display = "none"}, 3000);
39 return false;
40 }
41 else
42 {
43 divToolTip.style.display = "none";
44 return true;
45 }
46 }
47 },
48 // 创建一个div,用于显示错误信息
49 _createToolTip : function ()
50 {
51 var divToolTip = document.createElement("div");
52 divToolTip.id = this.id + "_divToolTip";
53 divToolTip.style.display = "none";
54 divToolTip.style.border = "solid 1px black";
55 divToolTip.innerHTML = this._validator.errormessage;
56 divToolTip.style.backgroundColor = "lightYellow";
57
58 // 设这div的位置 为被验证控件的右边
59 var location = Sys.UI.DomElement.getLocation($get(this._validator.controltovalidate));
60 location.x += $get(this._validator.controltovalidate).offsetWidth + 2;
61 Sys.UI.DomElement.setLocation(divToolTip, location.x, location.y);
62 return divToolTip;
63 },
64 dispose : function ()
65 {
66 this._validator = null;
67 }
68}
69
70// 注册这个类
71Shenba.ToolTipValidator.registerClass("Shenba.ToolTipValidator", Sys.Component);
72
73if (typeof("Sys") !== "undefined") Sys.Application.notifyScriptLoaded();
页面的代码,主要是根据页面里的验证控件创建组件
创建组件
1<script language="javascript" type="text/javascript">
2 function pageLoad()
3 {
4 for (var i = 0; i < Page_Validators.length; i++)
5 {
6 $create
7 (
8 Shenba.ToolTipValidator,
9 {id : "validator" + i, validator : Page_Validators[i]},
10 null,
11 null,
12 null
13 );
14 }
15 }
16 </script>
1<script language="javascript" type="text/javascript">
2 function pageLoad()
3 {
4 for (var i = 0; i < Page_Validators.length; i++)
5 {
6 $create
7 (
8 Shenba.ToolTipValidator,
9 {id : "validator" + i, validator : Page_Validators[i]},
10 null,
11 null,
12 null
13 );
14 }
15 }
16 </script>
少不了的scriptmanager,需引用保存类的js文件
scriptManager
1 <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
2 <Scripts>
3 <asp:ScriptReference Path="ToolTipValidator.js"/>
4 </Scripts>
5 </asp:ScriptManager>
1 <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
2 <Scripts>
3 <asp:ScriptReference Path="ToolTipValidator.js"/>
4 </Scripts>
5 </asp:ScriptManager>
这里仅仅是客户端的组件,完全可以升级成服务器的组件,这样重用度会高一些,另外在显示tooltip方面还可以继续扩展,欢迎各位执教。