Дано — страница с неизвестным количеством кнопок. На каждую кнопку навешен обработчик onclick, который асинхронно выполняет какую-то функцию:
<input type="button" value="Button 1" />
<input type="button" value="Button 2" />
<input type="button" value="Button 3" />
<script>
$(function() {
$('input').click(function() {
var $button = $(this);
$button.attr('disabled', 'disabled');
setTimeout(function() {
$button.removeAttr('disabled');
}, 2000);
});
});
</script>
Задача — поставить выполнение обработчиков onclick в очередь, т.е. чтобы каждый новый начинал работу только после завершения выполнения предыдущего.
Решение на jQuery.queue():
$(function() {
var $document = $(document);
$('input').click(function() {
var $button = $(this);
// добавляем код в очередь
$document.queue(function() {
$button.attr('disabled', 'disabled');
setTimeout(function() {
$button.removeAttr('disabled');
// по завершению вызываем следующую функцию в очереди
$document.dequeue();
}, 2000);
});
});
});
Демо.
Похожие записи
- Вывести карту из конструктора Яндекс.Карт в jQuery UI Dialog
- ScrollToFixed — jQuery плагин для фиксации блоков при пропадании их из зоны видимости
- Включаем поддержку HTML5 атрибута placeholder для устаревших браузеров
- Как скрыть элемент при клике вне этого элемента
- Как подключить javascript файл из своего js скрипта
Комментарии
Спасибо за пост. Просто и понятно.
На кану встретилась аналогичная задача - разрулил так:
Красивая фишка - API
Добавить комментарий