GridView的客户端检测(一个奇怪的问题)
最近第一次做web的项目,感觉头大,这web跟windows区别太大了,今天就遇到一个奇怪的问题。
我的GridView上有一列放的是TextBox要求只能输入数字,现在我希望当光标离开TextBox的时候就进行检测,所以我写了一段通用的代码。
1/// <summary>
2 /// 得到一段检测输入是否为有效数据的脚本
3 /// 使用方法: txtBox..Attributes.Add("onBlur", "ClientCheckFunction('txtBox',10,4)");
4 /// 说明检测的TextBox为 txtBox,并且整数位为10位,小数位为4位
5 /// 注意:先要RegisterStartupScriptd调用
6 /// </summary>
7 /// <returns></returns>
8 private string GetCheckScript()
9 {
10 return @"<script language=""javascript"">
11
12 function ClientCheckFunction(strName,nInt1,nInt2)
13 {
14 if(isNaN(document.all(strName).value))
15 {
16 alert(""您输入的不是合法的数字。"");
17 document.all(strName).focus();
18 document.all(strName).select();
19 return false;
20 }
21
22 var sm = '^(\\d){1,'+nInt1+'}$|^(\\d){1,'+nInt1+'}\\.(\\d){1,'+nInt2+'}$';
23 var m = new RegExp(sm);
24 if(!m.test(document.all(strName).value))
25 {
26 alert('输入的数字整数位最多'+nInt1+'位,小数位最多'+nInt2+'位');
27 document.all(strName).focus();
28 document.all(strName).select();
29 return false;
30 }
31 return true;
32 }</script>";
33
34
35 }
2 /// 得到一段检测输入是否为有效数据的脚本
3 /// 使用方法: txtBox..Attributes.Add("onBlur", "ClientCheckFunction('txtBox',10,4)");
4 /// 说明检测的TextBox为 txtBox,并且整数位为10位,小数位为4位
5 /// 注意:先要RegisterStartupScriptd调用
6 /// </summary>
7 /// <returns></returns>
8 private string GetCheckScript()
9 {
10 return @"<script language=""javascript"">
11
12 function ClientCheckFunction(strName,nInt1,nInt2)
13 {
14 if(isNaN(document.all(strName).value))
15 {
16 alert(""您输入的不是合法的数字。"");
17 document.all(strName).focus();
18 document.all(strName).select();
19 return false;
20 }
21
22 var sm = '^(\\d){1,'+nInt1+'}$|^(\\d){1,'+nInt1+'}\\.(\\d){1,'+nInt2+'}$';
23 var m = new RegExp(sm);
24 if(!m.test(document.all(strName).value))
25 {
26 alert('输入的数字整数位最多'+nInt1+'位,小数位最多'+nInt2+'位');
27 document.all(strName).focus();
28 document.all(strName).select();
29 return false;
30 }
31 return true;
32 }</script>";
33
34
35 }
对于这段代码的使用如下:
1 if (!Page.IsStartupScriptRegistered("ClientCheck"))
2 {
3 Page.RegisterStartupScript("ClientCheck", GetCheckScript());
4 }
5 txtInPoint.Attributes.Add("onBlur", "ClientCheckFunction('txtInPoint',10,4)");
2 {
3 Page.RegisterStartupScript("ClientCheck", GetCheckScript());
4 }
5 txtInPoint.Attributes.Add("onBlur", "ClientCheckFunction('txtInPoint',10,4)");
txtInPoint是一个不在grid中TextBox
如果对于GridView中textbox
1 TextBox txt = (System.Web.UI.WebControls.TextBox)e.Row.FindControl("txtPoint");
2 txt.Attributes.Add("onblur", "ClientCheckFunction('"+txt.ClientID+"',10,4)");
2 txt.Attributes.Add("onblur", "ClientCheckFunction('"+txt.ClientID+"',10,4)");
这样是正常的,改为如下
1 TextBox txt = (System.Web.UI.WebControls.TextBox)e.Row.FindControl("txtPoint");
2
3 //txt.Attributes.Add("onblur", "ClientCheckFunction('"+txt.ClientID+"',10,4)");
4 txt.Attributes.Add("onblur", "ClientCheckFunction('txtPoint',10,4)");
2
3 //txt.Attributes.Add("onblur", "ClientCheckFunction('"+txt.ClientID+"',10,4)");
4 txt.Attributes.Add("onblur", "ClientCheckFunction('txtPoint',10,4)");
这就有问题了,但实际上我跟了好几次,发现txt.ClientID就是"txtPoint",所以我实在不知道这样到底错在哪里,
记录一下,请知道的达人解释一下。