2011-12-13 6 views
2

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

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> 

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

Что я здесь делаю неправильно?

+0

Разве это взрывается одинаково во всех браузерах? Как вы «размываетесь»? С помощью мыши или табуляции? – Romanulus

+0

на самом деле выводит разные вещи в разных браузерах, но результат не изменится –

ответ

1

переместить 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";  
       } 
      } 
    } 
} 
+0

Спасибо @Gerben, я потратил много времени на это ... –

1

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

Смежные вопросы