Не уверен, если вы уже знаете об этом, но clearTimeout принимает timeoutID, который ранее возвращался из вызова setTimeout.
Поэтому вам необходимо присвоить этот идентификатор тайм-аута переменной, которая остается в области действия, когда вам нужно отменить ее. Затем передайте его вызову clearTimeout, когда вам нужно остановить цикл.
Поскольку это просто целочисленный идентификатор, другим вариантом может быть создание настраиваемого атрибута для элемента dom с использованием чего-то вроде "domElement.setAttribute ('timoutIDFirst');"; (или attr в jQuery), а затем просто извлекайте его, используя getAttribute, когда это необходимо.
Учитывая, что у вас несколько таймеров, использование пользовательских атрибутов в элементах DOM может помочь сохранить порядок.
EG:
function mediumtosmall(visiblespan) {
vt.removeClass('medium').addClass('small');
// Store the timeoutID for this timer
var storedTimeoutID=setTimeout(function() { smalltomedium(visiblespan); },150);
$('span:visible').attr('timeoutID',storedTimeoutID);
};
и затем:
$('div.click').click(
function(event) {
var visiblespan = $('span:visible');
var invisiblespan = $('span:visible');
mediumtosmall(visiblespan);
var storedTimeoutID=invisibleSpan.attr('timeoutID');
// Pass the ID to clearTimeout
clearTimeout(storedTimeoutID);
}
);