Отслеживание изменений 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, время: 15:11. |