JavaScript: как отложить отправку данных, когда несколько флажков нажали в короткий промежуток времени? - PullRequest
2 голосов
/ 28 мая 2010

У меня есть массив флажков в сложной динамической HTML-форме.Всякий раз, когда пользователь щелкает один флажок, генерируется довольно дорогой запрос и отправляется на удаленный сервер.Я хочу отложить это действие в зависимости от следующего действия пользователя.Если пользователь быстро щелкает несколько флажков, все первые щелчки должны быть отменены, только последний обрабатывается и в конечном итоге отправляется примерно через 1 секундуможет быть, это обычная проблема, но я никогда не работал с таймаутами раньше.

1 Ответ

0 голосов
/ 28 мая 2010

метод, который вы пытаетесь использовать, называется debouncing.
У меня обычно есть общая функция debounce в моем javascript:

var debounce=function(func, threshold, execAsap) {
    var timeout;
    return function debounced () {
        var obj = this, args = arguments;
        function delayed () {
            if (!execAsap)
                func.apply(obj, args);
            timeout = null; 
        };
        if (timeout)
            clearTimeout(timeout);
        else if (execAsap)
            func.apply(obj, args);
        timeout = setTimeout(delayed, threshold || 100); 
    }; 
};

А потом, когда что-то нужно отменить, я обычно отклоняю функцию,
В вашем случае это может быть что-то вроде:

$("checkbox").click(debounce(callBackFunction,1000));

, где callbackFunction - функция, выполняющая ваш "дорогой jquery", а 1000 - время ожидания.

Применение вышеизложенного означало бы, что callbackFunction вызывается с интервалом в 1 секунду, если он вызывается с более короткими интервалами, вызов игнорируется.

...