Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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
Javascript 防止在输入停止之前执行回调_Javascript_Timer_Dom Events - Fatal编程技术网

Javascript 防止在输入停止之前执行回调

Javascript 防止在输入停止之前执行回调,javascript,timer,dom-events,Javascript,Timer,Dom Events,如果没有按下任何键,则触发AJAX调用的计时器。如果按键,则中止最后一个计时器并添加新计时器。这就是我想做的,但没有成功。这是我的密码: var t; input.onkeyup = function(){ $('.confirmText').html('Checking...'); var timeStampObj = new Date() var timeStamp = timeStampObj.getTime(); var oldTimeStamp =

如果没有按下任何键,则触发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);
}
vart;
input.onkeyup=函数(){
$('.confirmText').html('Checking…');
var timeStampObj=新日期()
var timeStamp=timeStampObj.getTime();
var oldtimstamp=$(this).attr('timeStamp');//我在元素中存储时间戳
如果(时间戳<500+旧时间戳){
$(this.attr('timeStamp',timeStamp);
清除超时(t);
}
t=设置超时(函数(){
$.ajax({
url:'serverScripts/settings/checkEmailAvailability.php',
数据:“电子邮件=”+电子邮件,
成功:函数(文本){
如果(文本==“可用”){
$('.confirmText').html('Available!');
}否则{
$('.confirmText').html('occulated!');
}
}
});
},500);//半秒钟
$(this.attr('timeStamp',timeStamp);
}

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

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
的回调就不会执行

优秀的库包括并且至少有两个jQuery插件:


在JavaScript中,您在哪里定义
email
变量

你需要在某个地方定义
电子邮件
,然后检查脚本是否有效

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

好的,只是一个小的误发邮件没有定义