Предотвращение выполнения обратного вызова до остановки ввода - PullRequest
3 голосов
/ 18 февраля 2011

Таймер для вызова 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);
}

Ответы [ 2 ]

5 голосов
/ 18 февраля 2011

Звучит так, будто вы просите об установлении ситуации. Термин происходит от электроники . Это способ предотвратить запуск нескольких событий в течение определенного промежутка времени. Вы можете использовать следующую функцию для создания новой функции, которая будет вызываться только в том случае, если с момента последнего события прошло определенное количество времени.

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 включает в себя эквивалентную функцию и существует как минимум пара плагинов jQuery:

0 голосов
/ 19 февраля 2011

Где вы определяете переменную email в вашем JavaScript?

Вам нужно где-то определить email, а затем проверить, работает ли ваш скрипт.

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