<html><head>
<script language="JavaScript">
var obj=null;
function Test()
{
if(obj!=null){obj=null;return;}
         var iLenth=document.all("t1").length;
for(var i=0;i<iLenth;i++)
{
if(document.all("t1",i).value!="222")
{
                           alert("Error");
                           obj=document.all("t1",i);
obj.select();
return ;
}
}

}
</script>
</head>
<body>
<input type="text" name="t1" id="text1" value="111" onblur="Test()">
<input type="text" name="t1" id="text2" value="111" onblur="Test()"/>
<input type="text" name="t1" id="text2" value="111" onblur="Test()"/>
</body>
</html>  

解决方案 »

  1.   

    “可是這個時候如果用戶點了其他的框.就會出現死循環”看不出哪里会死循环,多次循环的确会有,主要是因为焦点从控件A转到控件B时,浏览器总是先触发A的onfocus,再触发B的onblur对于
    <input type="text" name="t1" id="text1" value="111" onblur="Test()">
    <input type="text" name="t1" id="text2" value="111" onblur="Test()">假设原本focus=text2(表示焦点在text2),且text2内容错误,用户点击text1:text1.onfocus()
    text2.onblur()
    // 此事件判断 text2 错误,所以执行 text2.select() 部分
    text2.onfocus()
    // 因为 text2.select()
    text1.onblur()
    // 因为 text2.select()
    // 而且由于 text2 还没改过来,还是错的
    // 所以其中又执行了一次 text2.select() 部分
    // 所以会有两次 alert("Error")
    (可能跟浏览器版本有关,不知道你的机器上是不是同样的现象?)
    也许该换种检查方式?
      

  2.   

    另外,由于你的循环顺序:
    for(var i=0;i<iLenth;i++)
    就规定了用户必须将前面的input输入正确,才可能输入后面的input(否则就会被select强制转到前面的控件),即用户只能按顺序从前往后输入,似乎有些太“霸道”
      

  3.   

    还发现一个“毛病”:
    如果用 onblur,用户不想输入了,关闭浏览器,也会蹦出个 alert!
    惹不起还不让人家躲?我觉得从用户角度考虑,宁可把其它所有控件都加上 onfocus (其实一般你只需要给同一个 FORM 的控件加),也比把这几个控件加 onblur 好