在VS中建立一个网站,在网站里新建一个页面,在页面添加两个文件框,一个RegularExpressionValidator验证控件,再写几行字,好戏开演,哈哈(body部分的代码如下):
<
body
>
< form id ="form1" runat ="server" >
< div style ="width:400px;" >
< asp:TextBox ID ="TextBox1" runat ="server" ></ asp:TextBox >
< asp:RegularExpressionValidator ID ="RegularExpressionValidator1" runat ="server"
ControlToValidate ="TextBox1" Display ="Dynamic"
ErrorMessage ="这一行是RegularExpressionValidator的错误提示"
ValidationExpression ="/d+" ></ asp:RegularExpressionValidator >
< br />
看看这行能不能不删除 < br />
< asp:TextBox ID ="TextBox2" runat ="server" ></ asp:TextBox >
</ div >
</ form >
</ body >
简单到不能再简单了,对不?需要注意两点:外面一个DIV的宽度要是400px,可以调整,但不能太宽,一会儿你就明白原因了,RegularExpressionValidator限制TextBox1只能输出数字,一会儿要输入字母以触发验证控件。
< form id ="form1" runat ="server" >
< div style ="width:400px;" >
< asp:TextBox ID ="TextBox1" runat ="server" ></ asp:TextBox >
< asp:RegularExpressionValidator ID ="RegularExpressionValidator1" runat ="server"
ControlToValidate ="TextBox1" Display ="Dynamic"
ErrorMessage ="这一行是RegularExpressionValidator的错误提示"
ValidationExpression ="/d+" ></ asp:RegularExpressionValidator >
< br />
看看这行能不能不删除 < br />
< asp:TextBox ID ="TextBox2" runat ="server" ></ asp:TextBox >
</ div >
</ form >
</ body >
好了,现在按下F5开始运行,在TextBox1中随便输出字母,只要能触发验证控件就可以了,然后就鼠标点击TextBox2以期望移动焦点到TextBox2,一定要用鼠标,键盘的Tab键不好用的。
然后,你发现了什么?焦点在哪里?对,没有错,就是在“看看这行能不能删除”的后面,不在文本框里啊,更搞笑的是你这时候按Backspace键,居然能把这行字删除,然后你可以继续往前删除,RegularExpressionValidator的提示,甚至TextBox1本身都可以从页面中删除。原来当验证控件的提示出来后因为太长而折行了,下面的文本框被向下挤了一行,IE判断焦点不是控件属性?而是用页面上的坐标?
眼镜掉到地上了吧?呵呵,不知道IE内核咋搞的,IE6、IE7还有用IE内核的一些其他浏览器,都可以重现这个BUG,但非IE内核的比如FF就没有这个问题
查看了一下生成到页面的源代码,JS太长没有时间看,有时间再研究下到底是什么原因导致IE如果爆笑