我正在使用jquery .keyup()并延迟触发表单验证。我将延迟分为两部分。一个延迟是用于键盘功能,另一个延迟添加到错误响应中,因此如果有人说一个慢速的话,它就不会不必要地给出错误。我不认为这是成功确认的问题,这就是为什么它只适用于错误。
当用户在输入中键入错误并在错误延迟触发之前开始键入下一个输入时,会出现此问题。发生这种情况时,不会发生第一次输入的ajax验证。那么什么是使其正常工作的解决方案?
jQuery(document).ready(function(){
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
var j=jQuery;
j('.prompt-cont input').on('keyup', function(){
$anchor = j(this);
delay(function(){
var valtype = $anchor.data("type");
var fieldval = $anchor.val();
var pass = j("input#signup_password").val();
var conpass = j("input#signup_password_confirm").val();
j.post( ajaxurl, {
action: 'valregister_fields',
'cookie': encodeURIComponent(document.cookie),
'fieldval':fieldval,
'passval':pass,
'passvalcom':conpass,
'valtype':valtype
},
function(response){
var resp=JSON.parse(response);
if(resp.code=='success') {
$target=$anchor.closest(".prompt-cont");
$target.find(".val-error").remove();
$target.find(".val-error-ajax").fadeOut().empty();
$target.find(".val-color").removeClass('error').addClass('success').fadeIn();
} else if(resp.code=='error'|| resp.code=='taken' || resp.code=='registered') {
// } else if (j.inArray(resp.code, ['error', 'taken', 'registered'])) {
delay(function(){
$target=$anchor.closest(".prompt-cont");
$target.find(".val-color").fadeOut().removeClass('success').addClass('error').fadeIn();
$target.find(".val-error").remove();
$target.find(".prompt").effect( "shake", { times:3 }, 500 );
$target.find(".val-error-ajax").empty().fadeOut().html(resp.message).fadeIn();
}, 1000 );
} else {
$target=$anchor.parent("#ajax_check")
$target.find(".error").remove();
$target.find("#name-info").removeClass();
$target.find("#name-info").empty().html(resp.message);
}
});
}, 200 );
});
});