2012-11-26 81 views
0

我希望有人能帮助我以下。我有用户输入自己的密码,密码输入框,它会自动使用下面的代码jQuery的密码检查密码很慢

$('input[name=currentpassword]').keyup(function(){ 
       var currentcheck = $(this).val(); 
       var dataString='thisConfirm='+ currentcheck +'&userid='+$('input[name=userid]').val(); 
       PasswordChecking= $.ajax({ 
             type:"POST", 
             url:"/assets/inc/password-check.php", 
             data:dataString, 
             dataType:'html', 
             context:document.body, 
             global:false, 
             async:false, 
             success:function(data){ 
              return data} 
              }).responseText; 
        checkconfirms(emailconfirm, passconfirm, PasswordChecking); 
     }); 

但是我注意到是有每个按键之间的延迟了与数据库检查他们的密码,并希望有是检查输入密码的一种方法或替代方法,因为每个击键被延迟或不能识别,直到Ajax返回

+0

使用上'keyup'是不是一个好主意阿贾克斯。而是使用'onblur'或'blur' –

回答

4

你需要的是取消Ajax请求,从而在每个KEYUP不检查密码,如果用户快速打字,但只有当用户完成输入超时。你也应该使用异步调用,以避免锁定浏览器,像这样:

$('input[name=currentpassword]').on('keyup', function() { 
    var data = {thisConfirm : this.value, userid: $('input[name=userid]').val()}; 

    clearTimeout($(this).data('timer')); 

    $(this).data('timer', setTimeout(function() { 
     $.ajax({ 
      type: "POST", 
      url: "/assets/inc/password-check.php", 
      data: data, 
      dataType: 'html', 
      context: document.body, 
      global: false, 
     }).done(function() { 
      checkconfirms(emailconfirm, passconfirm, PasswordChecking); 
     }) 
    },400); 
});​ 
0

您正在使用async:false,这对于异步调用应该是正确的。我建议你检查jquery事件focusout()而不是密码的密码。

$('input[name=currentpassword]').focusout(function(){ 
      var currentcheck = $(this).val(); 
      var dataString='thisConfirm='+ currentcheck +'&userid='+$('input[name=userid]').val(); 
      PasswordChecking= $.ajax({ 
             type:"POST", 
             url:"/assets/inc/password-check.php", 
             data:dataString, 
             dataType:'html', 
             context:document.body, 
             global:false, 
             async:true, 
             success:function(data){ 
             //return data 
             alert("here you would decide on data for valiadation success"); 
             } 
           }).responseText; 
       checkconfirms(emailconfirm, passconfirm, PasswordChecking); 
    }); 
1

使用blurfocusout事件,阿迪尔建议,是一种选择。另一种方法是使用setTimeout()来延迟检查密码,以便在每次击键时不发送AJAX请求。相反,你会在停止键入输入后X秒内发送一个AJAX请求。

var checkPassword; 
$('input[name=currentpassword]').keyup(function() { 
    clearTimeout(checkPassword); 
    checkPassword = setTimeout(function() {verifyPassword(this)}, 1000); // this would delay calling verifyPassword() by 1 second 
}); 

function verifyPassword(element) { 
    var currentcheck = element.value; 
    // do your AJAX call here 
});