Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Остановка функции по клику. (https://javascript.ru/forum/misc/21195-ostanovka-funkcii-po-kliku.html)

Miro 31.08.2011 20:46

Остановка функции по клику.
 
Всем доброго вечера.
Есть функция:

var sideA = $('aside nav a');
var q=0;
$('.pakages_menu a').each(function(i) {
	setTimeout(function() {
		$(sideA).removeClass('pm_active');
		$(sideA[q]).addClass('pm_active');
		q+=1;
	}, 1000*i);
});


Переключает class по порядку каждую секунду.
Подскажите, как правильно отловить клик на любую из ссылок (aside nav a) и по нему (по клику) остановить выполнение функции?

melky 31.08.2011 22:02

код надо вставлять в специально подготовленные для этого теги
[js]
... ваш код...
[/js]


для решения этой задачи надо где-нибудь сохранять номера таймаутов при их инициализации и по клику на элемент очищать эти таймауты. сделать это в пределах текущей задачи можно так

var sideA = $('aside nav a'),
    q = 0,
    timeouts = [];


$('.pakages_menu a').each(function(i) {
    // setTimeout возвратит ИД таймера, который потом будет использоваться при клике
    // не создаем лишних переменных, сразу загоняем это дело в массив.
    timeouts.push(setTimeout(function() {
        $(sideA).removeClass('pm_active');
        $(sideA[q]).addClass('pm_active');
        q += 1;
    }, 1000 * i));
});

sideA.click(function(){
    // обходим массив ИД таймеров
    $.each(timeouts, function(i,id){
        clearTimeout(id); // очищаем таймаут
    }); 
    // на всякий случай очистим массив
    timeouts = [];
});

Miro 01.09.2011 10:39

Спасибо, очередной раз выручаете! :)

nikita.mmf 01.09.2011 11:02

melky,
// на всякий случай очистим массив
timeouts.length = 0;


Часовой пояс GMT +3, время: 14:31.