Отслеживание изменений value в input
Здравствуйте, знаю были уже похожие темы, но ответа не нашел. Необходимо выполнить функцию если значение в поле было изменено и не менялось в течении скажем 5 секунд, если менялось то выждать еще 5 сек, если в течении 5 сек снова изменили, то снова 5 сек выждать и т. д. Как это сделать?
Объясню зачем это нужно, я делаю подбор товара по параметрам (аналог расширенного поиска яндекс-маркета) на ajax и в одном из полей используется ползунок (trackbar). Все бы ничего, но если параметров на товар много, то если двигать ползунок туда сюда быстро - получим огромную нагрузку на БД и зависание. На яндекс маркете как раз организовано описанное выше отслеживание полей рядом с ползунками, думаю в тех же целях (запрос в БД не пройдет, пока пользователь не перестанет баловаться с ползунком). |
/** * Функция не дает вызвать функцию больше чем 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 ); |
если нужно вызывать функцию раз в 5 секунд, ставь вторым параметром значение 0.2, к примеру:
var handler = foo(function() { // some code }, 0.2 ); handler();будет вызвана не чаще чем раз в пять секунд. |
Соль в том - что интересней исследовать остановку ползунка на время стояния - вот коли он простоял не тронутый - пару секунд - отправляем запрос - каждое движение сбрасывает таймер тестирования "устаканивания" на 0
|
Цитата:
|
Цитата:
|
kosar,
:write: Тут же Выше мастер отписал - подождите... |
Часовой пояс GMT +3, время: 21:14. |