1

単純な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";
}

4

2 に答える 2

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);
于 2013-01-31T02:51:10.917 に答える
3
for (i = 0; i < userLogins.length; i++)
{ 
    if(pass == userLogins[i].password && user == userLogins[i].user )
    {
        success = true;
    }
    else
    {
        success = false;
    }
}

breakそこに が必要です。そうしないと、次の反復でtruesuccessが上書きされるだけです... 「次の」反復がない最後の可能な資格情報falseを除きます。

それが完了したら、実際にはelseブランチはまったく必要ありません。

var success = false;
for (i = 0; i < userLogins.length; i++) { 
    if (pass == userLogins[i].password && user == userLogins[i].user) {
        success = true;
        break;
    }
}
于 2013-01-31T03:23:44.240 に答える