javascript - 延迟 keyup 函数(如 jquery 和 ajax 验证)

标签 javascript jquery ajax

var validate_email_login = function()
{
    console.log("validate-email");
    var item5 = $("#user_email2").val();
    var item5 = item5.toLowerCase();
    if (item5.length < 6 || item5.length > 50)
    {
        $("#errormsg6").html("Email : 6 - 50 Characters");
    }
    else
    {
        if (!emailformat.test(item5))
        {
            $("#errormsg6").html("Wrong Email Format");
        }
        
    }
}

var delay = (function() {
  var timer = 0;
  return function(cb, ms) {
    // ------------^
    clearTimeout(timer);
    timer = setTimeout(cb, ms);
    //-----------------^
  };
})();

$("#user_email2").keyup(function() {
  delay(function() {
   validate_email_login();
  }, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="email" class="homepage"  name="user_email2" id="user_email2" placeholder="Email" maxlength="50"  />

<div  id ="errormsg6"></div>

我有一个基于jquery和ajax的验证函数..我想延迟整个事情...在keyup上该函数包括jquery和ajax...

html

<input type="email" class="homepage"  name="user_email2" id="user_email2" placeholder="Email" maxlength="50"  />

jquery 和 ajax

var validate_email_login = function()
{
    console.log("validate-email");
    var item5 = $("#user_email2").val();
    var item5 = item5.toLowerCase();
    if (item5.length < 6 || item5.length > 50)
    {
        $("#errormsg6").html("Email : 6 - 50 Characters");
    }
    else
    {
        if (!emailformat.test(item5))
        {
            $("#errormsg6").html("Wrong Email Format");
        }
        else
        {
            $.ajax(
            {
                type: 'POST',
                url: 'classes/validatelogin.php?f=1',
                data: "user_email2=" + item5,
                success: function(msg)
                {
                    if (msg == "ok")
                    {
                        $("#errormsg6").html("Email Does Not Exist");
                    }
                    else if (msg == "exists")
                    {
                        user_email2 = "1";
                        $("#errormsg6").html("");
                    }
                }
            });
        }
    }
}

延迟函数如下

var delay = (function()
{
    var timer = 0;
    return function(ms)
    {
        clearTimeout(timer);
        timer = setTimeout(ms);
    };
})();

$("#user_email2").keyup(function()
{
    delay(function()
    {
        validate_email_login;
    }, 1000);
});

但是我没有得到延迟...我是缺少什么东西吗我是 javascript 的新手......

最佳答案

您需要将回调传递到延迟函数中,并使用 setTimeout 调用它。

function validate_email_login() {
  //...stuff
}

var delay = (function() {
  var timer = 0;
  return function(cb, ms) {
    // -----------^
    clearTimeout(timer);
    timer = setTimeout(cb, ms);
    //-----------------^
  };
})();

$("#user_email2").keyup(function() {
  delay(validate_email_login, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="user_email2" placeholder="keyup"/>

关于javascript - 延迟 keyup 函数(如 jquery 和 ajax 验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42897980/

相关文章:

javascript - jQuery 动态创建表/tr/td 等并附加属性

javascript - 在 Drupal 7 中添加 "onclick"属性到登录提交按钮

javascript - 如何使用 cookie 存储复杂信息并随后根据数据动态触发操作?

javascript - ajax mvc html : jquery val not preventing call to api

javascript - 如何设置高度 :0?

javascript - 我如何在 vue.js 中存储文件?

javascript - 了解 JavaScript 事件和修复动态电子邮件错误的时间

jQuery/Ajax 无法获取提交按钮名称

javascript - "Editing"用户文本正在运行?

javascript - 是否可以在 Vue.js 中解析每个实例的子组件?