有时候,我们需要在客户端验证客户是否勾选上了CHECKBOXLIST中的某一项或者验证客户端是否未选择CHECKBOXLIST的任何项
我们通常需要为这种验证撰写客户端脚本并保证其在触发回传前调用
问题是,我们怎么样在客户端脚本中去引用这些CHECKBOX呢?因为CHECKBOXLIST才有CLIENTID,而CHECKBOXLIST中的每一个子项是一个LISTITEM,其不具备CLIENTID呀?怎么办呢?
其实对于CHECKBOXLIST这样的实现了INameContainer的复合控件,其子控件的客户端ID及名称是根据名称进行的,其NAME属性为父控件的CLIENTID加冒号再加上其子控件的索引,而其ID属性则是父控件的CLIENTID加上下划线再加上子控件索引,例如,CHECKBOXLIST的CLIENTID为MyCheckBOX,那么,其第二个子项CHECKBOX的客户端ID就是MyCheckBOX_1,其NAME属性则为MyCheckBOX:1
依次类推,我们就能用下面的代码在客户端去判断是否有CHECKBOX被选择了
strScript.Append("<script language='javascript'>function CheckSearch()\n{with(document.forms[0])\n{\n");
strScript.Append("if("+TbKeyword.ClientID+".value=='') {alert(\"Must Input Keyword\");return(false);} \nvar IsSel=false;");
for(int i=0;i<CbTarget.Items.Count;i++)
{
strScript.Append("\nif("+CbTarget.ClientID+"_"+i.ToString()+".checked) {IsSel=true;}");
}
strScript.Append("\nif(!IsSel) {alert(\"What you want search?\\nyou must checked!\");\nreturn(false);}\n");
strScript.Append("\n}\n}\n</script>");
strScript.Append("if("+TbKeyword.ClientID+".value=='') {alert(\"Must Input Keyword\");return(false);} \nvar IsSel=false;");
for(int i=0;i<CbTarget.Items.Count;i++)
{
strScript.Append("\nif("+CbTarget.ClientID+"_"+i.ToString()+".checked) {IsSel=true;}");
}
strScript.Append("\nif(!IsSel) {alert(\"What you want search?\\nyou must checked!\");\nreturn(false);}\n");
strScript.Append("\n}\n}\n</script>");
上面验证了一个TEXTBOX控件是否输入了内容,并且验证是否有CHECKBOX被选择了