由验证控件引起的IE的超级爆笑BUG

在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只能输出数字,一会儿要输入字母以触发验证控件。
好了,现在按下F5开始运行,在TextBox1中随便输出字母,只要能触发验证控件就可以了,然后就鼠标点击TextBox2以期望移动焦点到TextBox2,一定要用鼠标,键盘的Tab键不好用的。
然后,你发现了什么?焦点在哪里?对,没有错,就是在“看看这行能不能删除”的后面,不在文本框里啊,更搞笑的是你这时候按Backspace键,居然能把这行字删除,然后你可以继续往前删除,RegularExpressionValidator的提示,甚至TextBox1本身都可以从页面中删除。原来当验证控件的提示出来后因为太长而折行了,下面的文本框被向下挤了一行,IE判断焦点不是控件属性?而是用页面上的坐标?
眼镜掉到地上了吧?呵呵,不知道IE内核咋搞的,IE6、IE7还有用IE内核的一些其他浏览器,都可以重现这个BUG,但非IE内核的比如FF就没有这个问题
查看了一下生成到页面的源代码,JS太长没有时间看,有时间再研究下到底是什么原因导致IE如果爆笑
posted @ 2007-03-22 07:35  丁学  阅读(5644)  评论(17编辑  收藏  举报