需求:有几个表单,文本框贼多,要给这些文本框加验证
网上找了个JS验证的函数
Code
function checkAllTextValid()
{
var form=document.getElementById("form1");
//记录不含引号的文本框数量
var resultTag = 0;
//记录所有text文本框数量
var flag = 0;
for(var i = 0; i < form.elements.length; i ++)
{
if(form.elements[i].type=="text"||form.elements[i].type=="textarea")
{
flag = flag + 1;
//此处填写所要过滤的特殊符号
//注意:修改####处的字符,其它部分不许修改.
//if(/^[^####]*$/.test(form.elements[i].value))
if(/^[^\|"']*$/.test(form.elements[i].value))
{
resultTag = resultTag+1;
}
else
{
form.elements[i].select();
}
}
}
/**
* 如果含引号的文本框等于全部文本框的值,则校验通过
*/
if(resultTag == flag)
{
return true;
}
else
{
alert("文本框中不能含有\n\n 1 单引号: ' \n 2 双引号: \" \n 3 竖 杠: | \n 4 尖角号: < > \n\n请检查输入!");
return false;
}
}
本来想在保存按钮上加 OnClientClick="return checkAllTextValid()"
发现这样的话,这个页面的验证控件都不起效了,要自己一个一个文本框的去拖验证控件又太烦,决定自己扩展验证控件
Code
/// <summary>
/// 页面所有文本框验证控件
/// </summary>
[ToolboxData(@"<{0}:PageTextValidator runat='server'></{0}:PageTextValidator>")]
public class PageTextValidator : CompositeControl
{
private TextBox txtValidator;
private CustomValidator cvPageText;
protected override void CreateChildControls()
{
Controls.Clear();
txtValidator = new TextBox();
txtValidator.ID = "txtValidator";
txtValidator.Text = "";
cvPageText = new CustomValidator();
cvPageText.ControlToValidate = "txtValidator";
cvPageText.ClientValidationFunction = "ValidatorCheck";
cvPageText.Display = ValidatorDisplay.None;
cvPageText.ValidateEmptyText = true;
Controls.Add(txtValidator);
Controls.Add(cvPageText);
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Style, "display:none");
base.RenderContents(writer);
}
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Div;
}
}
CustomValidator控件用到的JS方法
function ValidatorCheck(oSrc,args)
{
if(checkAllTextValid())
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}
这样只要给要验证的页面放上
<cc1:PageTextValidator ID="PageTextValidator1" runat='server' />
就OK了