Проверка формы onblur () не работает - PullRequest
2 голосов
/ 13 декабря 2011

У меня есть этот код JavaScript (функция SHA-1 находится во внешнем файле):

    window.onload = validatePass;

    function validatePass() {
        var el = document.getElementById("oriPass");

        var user_pass = el.value;
        var hashed_pass = SHA1(user_pass);

        var span = document.createElement("span");
        el.parentNode.appendChild(span); 

        el.onblur = function doSomething() {
            if(user_pass == null || user_pass == "") {
                span.setAttribute('class','required');
                span.innerHTML="this is a required field";
            }
            else {
                if(hashed_pass != '7c4a8d09ca3762af61e59520943dc26494f8941b') {
                    span.setAttribute('class','required');
                    span.innerHTML="wrong password";
                }
                else {
                    span.setAttribute('class','required_ok');
                        span.innerHTML="valid password";    
                    }
                }
        }
    }

и это в html:

    <form name="form" method="post" action="change_pass.php">
    <div class="row">
        <div class="col1">write your password:<span class="required">&#42;</span></div>
        <div class="col2">
            <input type="password" name="original_pass" id="oriPass" />
        </div>
    </div>
    </form>

Почему-то каждый раз, когда я проверяю его, я получаю один и тот же вывод: «действительный пароль», независимо от того, является ли поле пустым, действительным или недействительным.

Что я здесь не так делаю?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

переместите код var user_pass... и var hashed_pass... в функцию onblur.Теперь они назначены только на нагрузку и никогда не изменятся.Также может быть лучше использовать onchange вместо onblur.

window.onload = validatePass;

function validatePass() {
    var el = document.getElementById("oriPass");


    var span = document.createElement("span");
    el.parentNode.appendChild(span); 

    el.onchange = function doSomething() {
        var user_pass = el.value;
        var hashed_pass = SHA1(user_pass);
        if(user_pass == null || user_pass == "") {
            span.setAttribute('class','required');
            span.innerHTML="this is a required field";
        }
        else {
            if(hashed_pass != '7c4a8d09ca3762af61e59520943dc26494f8941b') {
                span.setAttribute('class','required');
                span.innerHTML="wrong password";
            }
            else {
                span.setAttribute('class','required_ok');
                    span.innerHTML="valid password";    
                }
            }
    }
}
1 голос
/ 13 декабря 2011

Вы устанавливаете переменную для пароля только при загрузке. Это никогда не меняется после этого. Вам нужно установить его внутри функции onblur.

...