Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Keyup()如果首先启动新的Keyup,则延迟不触发_Jquery_Ajax_Validation_Keyup - Fatal编程技术网

Jquery Keyup()如果首先启动新的Keyup,则延迟不触发

Jquery Keyup()如果首先启动新的Keyup,则延迟不触发,jquery,ajax,validation,keyup,Jquery,Ajax,Validation,Keyup,我使用jquery.keyup()延迟触发表单验证。我把延迟分为两部分。一个延迟用于键控功能,另一个延迟添加到错误响应中,因此如果有人说打字速度慢,它不会给出不必要的错误。我不认为这是一个成功确认的问题,这就是为什么它只适用于错误 当用户在输入中键入错误并在触发错误延迟之前开始键入下一个输入时,就会出现此问题。发生这种情况时,不会对第一个输入进行ajax验证。那么,有什么解决方案可以让它正常工作呢 jQuery(document).ready(function(){ var delay

我使用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 );
    });
});

为什么要使用延迟来检查笔划的数量……。只有当输入中有一定数量的字符时,才使用$(“#inputfield”).val()触发错误检查机制。val()。length=='limit'…为什么不简单地使用
blur
?我不清楚。我的意思是,我增加了一个更长的延迟,这样,如果有人打字速度慢或者停顿了一秒钟,错误就不会触发。我需要的是,无论用户是否已开始键入新输入,都会触发该错误。我不使用模糊,因为最后一个字段不会以这种方式进行验证,因为下一次逻辑单击是“提交”按钮。