2012-11-26 85 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 
});