JS初体验——GridView中的数据验证
今天碰到了一个新的问题:在GridView的编辑状态下,如何对单元格内修改后的数据进行验证?
首先贴上一个在论坛上淘的正则:
function Check(a) {//这个正则验证的字符串为:纯数字,一个小数点,非0开头,非空。
var re = /^([1-9][0-9]*|0)(\.[0-9]+)?$/;
return re.exec(a) != null;
}
GridView控件中的数据验证难在单元格内的控件ID是页面生成后产生的,虽然也可以通过控件所在的行列序号来获取ID,但对我这个菜鸟来说还是有点复杂。
怎么办呢,一番思索,我想到了也许可以在this参数上做文章,于是我在GOOGLE查询JS中this参数的用法。结果在第一个搜索结果中就得到了下面这句话
在JavaScript中,this通常指向的是我们正在执行的函数本身,或者是指向该函数所属的对象(运行时)。
后半句提醒了我,我马上有了思路。
做法如下:
- 将GRIDVIEW中需要在修改时验证的列改为模板列。
- 在前端代码中修改模板列中的控件属性
<EditItemTemplate><asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Amount") %>' onblur="amountcheck(this)" Width="40"></asp:TextBox></EditItemTemplate>//this参数传入了控件的对象,替代了通过控件ID获取控件对象这一步
- 添加JS代码
function amountcheck(tb) {
if (!Check(tb.value)) {
alert("请输入正确的数量!");
tb.focus();
}
}
好了,现在GridView中的单元格在失去焦点时,就会触发验证,并且在用户没有输入符合要求的值之前,这将是一个死循环(有点霸道,不是好的处理方式)。