JS循环仅在匹配数组中的最后一个元素时才有效

时间:2013-01-31 02:49:01

标签: javascript

我无法在简单的js登录脚本中使用循环。当我尝试使用除数组中最后一个以外的任何登录(user3和pass3)登录时,它返回false。

我做错了什么?

我已经尝试了=====

var userLogins = [{user:"user1", password:"pass1"},{user:"user2", password:"pass2"},{user:"user3", password:"pass3"}]
var success = null;
function logon(user, pass) {
    userok = false;
    for (i = 0; i < userLogins.length; i++)
    { 
        if(pass == userLogins[i].password && user == userLogins[i].user )
        {
            success = true;
        }
        else
        {
            success = false;
        }
    }
    secret(success);
}

function getData() {
    var user = document.getElementById("userid").value;
    var password = document.getElementById("password").value;
    logon(user, password);
}

function secret(auth){
    if(auth)
    {
        show('success');
        hide('login');
    }
    else
    {
        show('error');
        hide('login');
    }
}

function show(show) {
    document.getElementById(show).className = "show";
}
function hide(hide) {
    document.getElementById(hide).className = "hide";
}

2 个答案:

答案 0 :(得分:3)

找到它时使用break。否则,下一个循环将成功设置为false。

for (var i = 0; i < userLogins.length; i++)
{ 
    if(pass == userLogins[i].password && user == userLogins[i].user )
    {
        success = true;
        break;
    }
    else
    {
        success = false;
    }
}
secret(success);

答案 1 :(得分:3)

for (i = 0; i < userLogins.length; i++)
{ 
    if(pass == userLogins[i].password && user == userLogins[i].user )
    {
        success = true;
    }
    else
    {
        success = false;
    }
}

您需要break ,否则true的{​​{1}}值会在下一次迭代时被success覆盖。 。最后可能的凭证除外,没有“下一次”迭代。

完成后,您根本不需要false分支:

else