flag标志位在js中为false为什么返回值是true?

js代码块

var  flag=false;
function FocusItems(obj){
    if($(obj).attr('name')==='code'){
    $(obj).next().next().html('').removeClass('error');
}else {
        $(obj).next('span').html('').removeClass('error');
    }
}


function CheckItems(obj){
    var msgBox=$(obj).next('span');


    switch ($(obj).attr('name')) {
        case "username":
            if (obj.value ==="") {
                msgBox.html('用户名不能为空');
                msgBox.addClass('error');
                flag=false;
            }
            else {
                var url1 = "/demo_war_exploded/UserNameCheck?name=" + encodeURI($(obj).val()) + "&" + new Date().getTime();

                $.get(url1, function (data) {
                    if (data ==="false") {
                        msgBox.html('用户名不存在')
                        msgBox.addClass('error');
                        flag=false;
                    } else {
                        msgBox.html().removeClass('error');
                        flag=true;
                    }
                });
            }
            break;
        case "password":
            if (obj.value ==="") {
                msgBox.html('用户密码不能为空');
                msgBox.addClass('error');
                flag=false;
            }else{
                flag=true;
            }
            break;
        case "code":
            var numshow = $(obj).next().next();

            if (obj.value === "") {
                numshow.html('验证码不能为空');
                numshow.addClass('error');
                flag=false;
            }else{
                var url = "/demo_war_exploded/CheckUserCode?num=" + encodeURI($(obj).val()) + "&" + new Date().getTime();

                $.get(url, function (data) {
                    if (data === "false") {
                        numshow.html('验证码输入有误');
                        numshow.addClass('error');
                        flag=false;
                    }else{
                        numshow.html().removeClass('error');
                        flag=true;
                    }
                });
            }
            break;
    }
}

function CheckForm(frm){
    var els=frm.getElementsByTagName('input');

    for (var i=0;i<els.length;i++){
        if(els[i]!=null){
        if(els[i].getAttribute("onblur")){
            CheckItems(els[i]);
        }
    }
    }
    alert(flag);
    return flag;
}

jsp代码

<div class="form">
       <h3>登陆</h3>
       <form action="<%=request.getContextPath()%>/UserLogin" method="post" onsubmit="return CheckForm(this)">
       <div class="inputBox">
           <input type="text" name="username" placeholder="用户名" value="" onfocus="FocusItems(this)" onblur="CheckItems(this)">
           <span></span>

       </div>
       <div class="inputBox">
           <input type="password" name="password" placeholder="密码" onfocus="FocusItems(this)" onblur="CheckItems(this)">
           <span></span>
       </div>
       <p class="forget"><a href="fgtpwd.jsp">忘记密码</a><a href="../register/register.jsp">用户注册</a></p>

           <div class="inputBox">
               <input type="text" name="code" value="" placeholder="验证码" style="width: 140px" autocomplete="off" onfocus="FocusItems(this)" onblur="CheckItems(this)">
               <img class="code" src="<%=request.getContextPath()%>/doYZM" alt="看不清换一张" onclick="change(this)">
               <span></span>
           </div>
       <div class="inputBox">
           <input type="submit" name="login" value="登陆">
       </div>
       </form>
       </div>


 

 

这里是上述代码返回值之前打印的flag的值,不知道为什么用户名错误和验证码错误都不返回false,请各位大佬指点一下错在哪里?我是最近刚刚开始学习的小白,找了两天找不到bug在哪,也不报错,所以束手无策了。

你switch判断的问题,比如用户名错误了,然后下一个判断密码,密码是对的,所以又改成了true

所以正确的逻辑应该是,判断用户名或密码或验证码,其中一个不满足条件就直接弹出提示信息了,不继续往下判断

初始化为true,在下面的用户名、密码和验证码判断逻辑中,只需要判断是否正确,不正确就flag=false,不用写else

var  flag=true;
function FocusItems(obj){
    if($(obj).attr('name')==='code'){
    $(obj).next().next().html('').removeClass('error');
}else {
        $(obj).next('span').html('').removeClass('error');
    }
}
 
 
function CheckItems(obj){
    var msgBox=$(obj).next('span');
 
 
    switch ($(obj).attr('name')) {
        case "username":
            if (obj.value ==="") {
                msgBox.html('用户名不能为空');
                msgBox.addClass('error');
                flag=false;
            }
            else {
                var url1 = "/demo_war_exploded/UserNameCheck?name=" + encodeURI($(obj).val()) + "&" + new Date().getTime();
 
                $.get(url1, function (data) {
                    if (data ==="false") {
                        msgBox.html('用户名不存在')
                        msgBox.addClass('error');
                        flag=false;
                    }
                });
            }
            break;
        case "password":
            if (obj.value ==="") {
                msgBox.html('用户密码不能为空');
                msgBox.addClass('error');
                flag=false;
            }
            break;
        case "code":
            var numshow = $(obj).next().next();
 
            if (obj.value === "") {
                numshow.html('验证码不能为空');
                numshow.addClass('error');
                flag=false;
            }else{
                var url = "/demo_war_exploded/CheckUserCode?num=" + encodeURI($(obj).val()) + "&" + new Date().getTime();
 
                $.get(url, function (data) {
                    if (data === "false") {
                        numshow.html('验证码输入有误');
                        numshow.addClass('error');
                        flag=false;
                    }
                });
            }
            break;
    }
}
 
function CheckForm(frm){
    var els=frm.getElementsByTagName('input');
 
    for (var i=0;i<els.length;i++){
        if(els[i]!=null){
        if(els[i].getAttribute("onblur")){
            CheckItems(els[i]);
        }
    }
    }
    alert(flag);
    return flag;
}

 

感谢各位大佬,昨天我用jquery重新写了一下