jquerykeyup检查密码非常慢
我希望有人能在以下方面帮助我。我有一个密码输入框,用户输入他们的密码,它会使用下面的代码自动检查数据库中的密码jquerykeyup检查密码非常慢,jquery,Jquery,我希望有人能在以下方面帮助我。我有一个密码输入框,用户输入他们的密码,它会使用下面的代码自动检查数据库中的密码 $('input[name=currentpassword]').keyup(function(){ var currentcheck = $(this).val(); var dataString='thisConfirm='+ currentcheck +'&userid='+$('input[name=us
$('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返回时才识别它,您使用的是
async:false,
,这对于异步调用应该是真的。我建议您在jqueryevent上检查密码,而不是keyup
$('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);
});
您正在使用
async:false,
这对于异步调用应该是true。我建议您在jqueryevent上检查密码,而不是keyup
$('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);
});
按照Adil的建议,使用
blur
或focusout
事件是一种选择。另一种方法是使用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
});
按照Adil的建议,使用
blur
或focusout
事件是一种选择。另一种方法是使用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
});
您需要的是一个超时,该超时将取消ajax请求,以便在用户快速键入时,不会在每次键入时检查密码,但只有在用户完成键入时才检查密码。此外,您还应该使用异步调用来避免锁定浏览器,如下所示:
$('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);
});
您需要的是一个超时,该超时将取消ajax请求,以便在用户快速键入时,不会在每次键入时检查密码,但只有在用户完成键入时才检查密码。此外,您还应该使用异步调用来避免锁定浏览器,如下所示:
$('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);
});
在
keyup
上使用ajax不是一个好主意。相反,使用onblur
或blur
在keyup
上使用ajax不是一个好主意。而是使用onblur
或blur