Javascript表单验证“onKeyup vs on keydown”

时间:2010-09-24 18:24:57

标签: javascript html ajax

组, 我有一个快速的问题? - 当最后一次按键启动时,有一种方法可以触发此onclick事件。

例如:在reTypePwd文本框中的最后一个keyup上验证newPwd == reTypePwd。如果我的密码是foo,我希望事件触发“o”而不是“f”。

function allClear() {
 var newPasswd = document.getElementById('newPwd');
 var reTypePasswd = document.getElementById('reTypePwd');

 newPasswd.value = "";
 reTypePasswd.value = "";
 return true;
}
function validate()
 {
   var currPwd = document.getElementById("currPwd").value;
   var newPwd = document.getElementById("newPwd").value;
   var confirmNP = document.getElementById("reTypePwd").value;
   if(currPwd == "" || newPwd == "")
   {
      document.getElementById("btnChange").disabled = true;
      if(confirmNP!=newPwd){
      document.getElementById("confirm").value = "Doesn't Match";
    }
 }
     if(confirmNP!=newPwd)
     {
     document.getElementById("newPwd").style.cssText = "border-color:Red";
     document.getElementById("reTypePwd").style.cssText = "border-color: Red"; 
     } 
     else {
           document.getElementById("btnChange").disabled = false;
           document.getElementById("newPwd").style.cssText = "border-color:none";
           document.getElementById("reTypePwd").style.cssText = "border-color: none"; 

            }
          }

谢谢

乍得

2 个答案:

答案 0 :(得分:2)

您不应该专门使用onkeyup onkeydown来检测用户输入。它们不会捕获边缘情况,例如剪切,粘贴,拖放或拼写检查修正。您应该使用HTML 5事件, oninput (Firefox 2 +,Google Chrome,Safari 4 +,Opera 10)和Internet Explorer的 onpropertychange 事件。对于不支持这两种事件的浏览器,您可以使用0ms计时器回退到 onkeydown 进行检查,这比 onkeyup 好一点。

在较新的浏览器中,您可以检查oninput事件,这应该是最可靠的方法。

答案 1 :(得分:0)

我猜“当最后一个按键启动时”是指两个密码字段包含相同长度的值?如果是这样,那么让keyup事件监听器首先检查值的长度。例如,在第二个密码长度等于或长于第一个密码的长度之前,请勿尝试验证。当然,如果第二个比第一个长,则验证失败:)