Показать сообщение отдельно
  #1 (permalink)  
Старый 05.12.2014, 20:34
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

как остановить таймер первого вызова при втором вызове
есть такая ситуция:

function doSmth(arg1, arg2, callback) {
    // тут какие то действия
    if (callback) setTimeout(callback, 7000);
}

elem.onclick = function () {
    doSmth(arg1, arg2, function() {
        anotherElem.style.display = "none";
    });
};

elem2.onclick = function () {
    doSmth(arg1, arg2, function() {
        elemElem.style.display = "none";
    });
};


если кликнуть первый элемент, то через 7 секунд другой элемент должен исчезнуть, а если кликнуть второй элемент, то опять же тот самый другой элемент должен исчезнуть через 7 секунд, но если второй элемент был нажат до того как таймер первого вызова сработал, то второй таймер игнорируется (ну или мне так кажется), так как другой элемент исчезает через 7 секунд после клика первого, а надо чтобы исчез через 7 секунд после клика по второму, как бы клик по второму элементу увеличивает жизнь ещё на 7 секунд если опять нажать первый либо второй, то ещё на 7 секунд, и т д, пока ничего не кликнется и другой элемент исчезнет

я сделал так, через id, но пришлось использовать глобальную переменную:
function doSmth(arg1, arg2, callback) {
    if (window.timer) clearTimer(timer);
    // тут какие то действия
    if (callback) timer = setTimeout(callback, 7000);
}

можно ли этот же результат как-то получить бнз использования глобальной переменной?
Ответить с цитированием