我写了一个注册表单    就拿用户名和密码为例吧
    用户名 文本框丢失焦点会调用一个方法来验证是否为空 把错误信息用innerHTML的方法插入旁边的表格。最后还得到用户框的焦点全选select()  返回false;
    密码框 丢失焦点也一样会调用一个方法来验证密码是否为空  把错误信息用innerHTML的方法插入旁边的表格。 最后 还是获取到密码框的焦点全选select() 返回false;    问题来了:
    我网页打开时候默认的焦点是在用户名框。
    如果我不写用户名而直接去点密码框   悲剧就产生了,在旁边的表格中提示出了两个框的输入错误信息,
    两个框框相互争夺焦点 成了循环了    不知道各位出现过这个情况没有。    说是为了人性化  输入有误后会在错误的文本框选中方便用户再次修改输入。
 
    难道不把获取焦点那句全选删了 就没有别的方法么?        

解决方案 »

  1.   


    得到用户框的焦点全选select()这是在干嘛?各是各的,你去全选干嘛?各自用各自的触发事件就行了。。
      

  2.   


    <script language="javascript">function checkU(){
            var name = document.f1.username.value;
            
            /***  用户名的验证  ***/    
            if(name==""||name.length==0){
                    checku.innerHTML="<font color='red'>用户名不能为空</font>";
                    //alert('用户名不能为空');
                    document.f1.username.select();
                    return false;
                }else{            
                    if(!/^[0-9a-zA-Z]+$/.test(name)){
                    checku.innerHTML="<font color='red'>用户名只能由数字和字母组成</font>";
                        
                    document.f1.username.select();
                    return false;                }else{
                        checku.innerHTML="<font color='green'>恭喜,用户名可以注册</font>";
                        return true;
                    } 
            }    function checkP(){
                var pass1 = document.f1.password1.value;
                var pass2 = document.f1.password2.value;
                
                /**  密码框的验证 ***/
                    if(pass1==""||pass1.length==0){
                    checkp.innerHTML="<font color='red'>密码不能为空</font>";
                    
                    document.f1.password1.select();
                     
                    return false;
                }else{
                    if(pass1.length>6&&pass1.length < 15){
                        //如果密码长度足够
                        checkp.innerHTML="<font color='green'>√</font>";
                        /***  密码相同验证  ***/
                        if(pass1 != pass2  ){
                            
                            checksp.innerHTML="<font color='red'>两次密码输出不一样</font>";
                            document.f1.password2.select();
                            return false;
                        }else{
                            checksp.innerHTML="<font color='green'>√</font>";
                            return true;
                        }
                      
                    }else{
                        
                        checkp.innerHTML="<font color='red'>密码长度大于6位且小于15位</font>";
                        document.f1.password1.select();
                        return false;
                    }
                
                }
            
                
                
            }<script ><form  name="f1" action="" method="post" onsubmit="return checkU()&&checkP()">
    用户:<input type="text" name="username" onblur="checkU();"><br>
    密码:<input type="password" name="password1"   onblur="checkP();"><br>
    密码确认:<input type="password" name="password2" ><br>
    <input type="submit"  value="提交"  />
    <input type="reset" value="取消" /> 
    </form>回复kouyiSC:
    为了用户人性化,比如输入错了会自动回到那个输入错的框并且全选,方便用户操作。
      

  3.   

    将js中所有的xx.xx.xx.select();全部改为xx.xx.xx.focus();就行了。。就能达到你说的效果了。。
      

  4.   

    还有一个问题是:将所有的检查文本框的js写在一个js类里面。。
    出现争夺焦点。是因为你onsubmit="return checkU()&&checkP()",同时调用了两个方法。。都去检查。。正确的逻辑应该是。。只要检查出用户框为空,,下面的密码框就不用检查了。。分先后顺序。
    还有就是。。用户框检查都没通过。。又去检查密码框没有必要。