2011-12-13 80 views
2

我有这样的javascript代码(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 2011-12-13 19:35:03

+0

它在不同的浏览器中实际输出不同的东西,但输出不会改变 – 2011-12-14 18:21:28

回答

1

在onblur函数内移动var user_pass...var hashed_pass...代码。现在只分配onload并且永远不会改变。此外,使用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

您只在加载时设置密码的变量。那之后它永远不会改变。你需要在onblur函数中设置它。