【问题标题】:Preventing a callback from executing until input stops阻止回调执行直到输入停止
【发布时间】:2011-02-18 12:58:18
【问题描述】:

如果没有按下任何键,则触发 AJAX 调用的计时器。如果按下某个键,则中止最后一个计时器并添加一个新计时器。这就是我想做但未能成功的事情。这是我的代码:

 var t;
 input.onkeyup = function(){
    $('.confirmText').html('Checking...');
    var timeStampObj = new Date()
    var timeStamp = timeStampObj.getTime();
    var oldTimeStamp = $(this).attr('timeStamp');//I store a timeStamp in the element
    if(timeStamp < 500 + oldTimeStamp){
        $(this).attr('timeStamp', timeStamp);
        clearTimeout(t);
    }
    t = setTimeout(function(){
        $.ajax({
            url: 'serverScripts/settings/checkEmailAvailability.php',
            data: 'email='+email,
            success: function(text){

           if(text == 'available'){
                $('.confirmText').html('Available!');
           }else{
                $('.confirmText').html('Occupied!');
               }
            }
        });
    }, 500);//Half a second
    $(this).attr('timeStamp', timeStamp);
}

【问题讨论】:

  • 好吧,只是没有定义一个小错误电子邮件

标签: javascript timer dom-events


【解决方案1】:

听起来您要求使用去抖动器。术语comes from electronics。这是一种防止多个事件在某个时间阈值内触发的方法。您可以使用以下函数创建一个新函数,该函数仅在自上次事件后经过给定时间后才会调用。

function debounce(callback, timeout, _this) {
    var timer;
    return function(e) {
        var _that = this;
        if (timer)
            clearTimeout(timer);
        timer = setTimeout(function() { 
            callback.call(_this || _that, e);
        }, timeout);
    }
}

// requires jQuery
$("div").click(debounce(function() {
    console.log("tset");
}, 2000));

只要点击事件不断触发,给debounce 的回调就不会执行。

优秀的 Underscore.js 库包括 an equivalent function 并且至少有几个 jQuery 插件:

【讨论】:

    【解决方案2】:

    您在 JavaScript 中的何处定义 email 变量?

    您需要在某处定义email,然后检查您的脚本是否有效。

    var email = $(this).value; // Pseudo-code - are you using jQuery?
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多