Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.08.2012, 14:40
Новичок на форуме
Отправить личное сообщение для kosar Посмотреть профиль Найти все сообщения от kosar
 
Регистрация: 03.08.2012
Сообщений: 2

Отслеживание изменений value в input
Здравствуйте, знаю были уже похожие темы, но ответа не нашел. Необходимо выполнить функцию если значение в поле было изменено и не менялось в течении скажем 5 секунд, если менялось то выждать еще 5 сек, если в течении 5 сек снова изменили, то снова 5 сек выждать и т. д. Как это сделать?

Объясню зачем это нужно, я делаю подбор товара по параметрам (аналог расширенного поиска яндекс-маркета) на ajax и в одном из полей используется ползунок (trackbar). Все бы ничего, но если параметров на товар много, то если двигать ползунок туда сюда быстро - получим огромную нагрузку на БД и зависание. На яндекс маркете как раз организовано описанное выше отслеживание полей рядом с ползунками, думаю в тех же целях (запрос в БД не пройдет, пока пользователь не перестанет баловаться с ползунком).
Ответить с цитированием
  #2 (permalink)  
Старый 03.08.2012, 14:44
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

/**
* Функция не дает вызвать функцию больше чем timesPerSecond в секунду
* 
* @param {Function} fn функция которая будет вызываться
* @param {Number} timesPerSecond количество выполнений в секунду
* @return {Function} возвращает ссылку на функцию обертку
*/
function foo( fn, timesPerSecond ) {
    var oldStart = 0;
    return function() {
        var newStart = ( new Date() ).getTime();
        if ( newStart - oldStart < 1000 / ( timesPerSecond || 1 ) ) {
            return;
        }
        oldStart = newStart;
        return fn.apply( this, arguments );
    }
}

// Пример использования
// функция будет вызвана не чаще чем 2 раза в секунду
document.addEventListener( "click", foo(function( e ){
 console.log( "click to: " + e.target.nodeName );
}, 2 ), false );
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 03.08.2012 в 14:47.
Ответить с цитированием
  #3 (permalink)  
Старый 03.08.2012, 14:51
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

если нужно вызывать функцию раз в 5 секунд, ставь вторым параметром значение 0.2, к примеру:
var handler = foo(function() {
    // some code
}, 0.2 );

handler();
будет вызвана не чаще чем раз в пять секунд.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 03.08.2012, 14:53
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Соль в том - что интересней исследовать остановку ползунка на время стояния - вот коли он простоял не тронутый - пару секунд - отправляем запрос - каждое движение сбрасывает таймер тестирования "устаканивания" на 0
Ответить с цитированием
  #5 (permalink)  
Старый 03.08.2012, 14:57
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Deff
Соль в том - что интересней исследовать остановку ползунка на время стояния - вот коли он простоял не тронутый - пару секунд - отправляем запрос - каждое движение сбрасывает таймер тестирования "устаканивания" на 0
ну да, я немного не то кинул... каюсь
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 03.08.2012, 15:01
Новичок на форуме
Отправить личное сообщение для kosar Посмотреть профиль Найти все сообщения от kosar
 
Регистрация: 03.08.2012
Сообщений: 2

Сообщение от Deff Посмотреть сообщение
Соль в том - что интересней исследовать остановку ползунка на время стояния - вот коли он простоял не тронутый - пару секунд - отправляем запрос - каждое движение сбрасывает таймер тестирования "устаканивания" на 0
На "JS-TrackBar" есть готовые решения в этом плане? Боюсь сам не смогу исследовать.
Ответить с цитированием
  #7 (permalink)  
Старый 03.08.2012, 15:05
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

kosar,
Тут же Выше мастер отписал - подождите...

Последний раз редактировалось Deff, 03.08.2012 в 16:01.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 18:27
Opera не выполняет style.fontSize=... в поле input Маэстро Opera, Safari и др. 6 20.06.2011 11:03
Изменение множества элементов Input по определённом призна Лавсановые Волокна Элементы интерфейса 1 24.12.2010 09:37
Копирование из одного input в другой input bar-boss Общие вопросы Javascript 7 08.04.2008 18:10
Разным элементам input - разное форматирование. Как? eclipse (X)HTML/CSS 1 25.10.2007 12:55