JQuery ждать х сек.бездействия перед вызовом функции - PullRequest
0 голосов
/ 14 октября 2011

У меня есть форма с несколькими кнопками, ползунками и т. Д., Которые при нажатии, перетаскивании и т. Д. Все запускают основную функцию ценообразования Ajax. Часто за короткий промежуток времени нажимают несколько раз кнопку (например, кнопка + дляувеличить значение).

Вместо того, чтобы каждый раз вызывать основную функцию ajax, я бы хотел, чтобы JQuery подождал 1 секунду после того, как событие запуска LAST выполнено перед выполнением.Другими словами, если функция сработала <1с с момента последнего запуска ... wait. </p>

Ответы [ 2 ]

2 голосов
/ 14 октября 2011

Я бы делал вызов setTimeout каждый раз, когда что-то меняется, и устанавливал таймаут на 1000 мс. Сохраните возвращенное значение из вызова setTimeout, и если изменение произойдет до того, как вызов setTimeout вызовет свой обратный вызов, отмените setTimeout и запустите другой.

var priceAdjustmentTimeout;
function somethingChanged() {
  if (priceAdjustment) {
    clearTimeout(priceAdjustmentTimeout);
  }
  priceAdjustmentTimeout = setTimeout(doPriceAdjustment, 1000);
}

function doPriceAdjustment() { 
  priceAdjustmentTimeout = null;
  /* do stuff here */
}
1 голос
/ 14 октября 2011

Этого можно добиться, используя в качестве флага логическую переменную и используя setTimeout. Это может выглядеть примерно так.

var wait = false;
$('#button').click(
     function() {
         if(!wait) {
             //run code here
             wait = true;
         } else {
           var t = setTimeout('some code here ending with `wait = false;`',1000);
        }
     }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...