clearTimeout () не работает

0

У меня есть небольшая функция, которая позволяет обрабатывать всплывающие окна на моей странице, и есть небольшая проблема с clearTimeout. Пожалуйста, взгляните на код:

function toggleModal(et, delayed) {

        if(et.hasClass('acc-edit-fn')) {
            if($.browser.msie) {$('#opacity-modal').height($(document).height()).toggleClass('acc-edit-fn');
                }
            else {$('#opacity-modal').height($(document).height()).toggleClass('acc-edit-fn').fadeTo('fast', 0.5);
                }   
            et.html($(this).html()).toggleClass('acc-edit-fn');
            if(delayed > 0) {       
                var dtf = setTimeout(function(){et.toggleClass('acc-edit-fn'); }, delayed);
                var dts = setTimeout(function(){$('#opacity-modal').toggleClass('acc-edit-fn').removeAttr('style');}, delayed);          
            }   
        }
        else {
            $('#opacity-modal').toggleClass('acc-edit-fn').removeAttr('style');
            et.toggleClass('acc-edit-fn');  
            clearTimeout(dtf);
            clearTimeout(dts);
        }
    };

Так что в основном, если вы вызываете func с "delayed"> 0, он будет вызывать автоматическое закрытие после определенного значения. Но если во всплывающем окне есть кнопка, которая позволяет закрыть ее перед таймером, всплывающее окно появится сразу после запуска таймера. Я попытался очистить таймауты с помощью clearTimeout(), но ошибка все еще существует. Вы можете проверить это на скрипке здесь: http://jsfiddle.net/LvVu9/ просто нажмите красную кнопку, а затем нажмите кнопку "ОК".

  • 1
    Проблема переменной области
  • 3
    jsfiddle.net/satpalsingh/LvVu9/1 , переместите вашу переменную во внешнюю область видимости
Теги:

2 ответа

2
Лучший ответ

dtf и dts оба выходят за рамки (где вы выполняете clearTimeout). Таким образом, вы можете определить эти глобальные.

Что-то вроде того:

var dtf = null;
var dts = null;
function toggleModal(et, delayed) {

        if(et.hasClass('acc-edit-fn')) {
            if($.browser.msie) {$('#opacity-modal').height($(document).height()).toggleClass('acc-edit-fn');
                }
            else {$('#opacity-modal').height($(document).height()).toggleClass('acc-edit-fn').fadeTo('fast', 0.5);
                }   
            et.html($(this).html()).toggleClass('acc-edit-fn');
            if(delayed > 0) {       
                dtf = setTimeout(function(){et.toggleClass('acc-edit-fn'); }, delayed);
                dts = setTimeout(function(){$('#opacity-modal').toggleClass('acc-edit-fn').removeAttr('style');}, delayed);          
            }   
        }
        else {
            $('#opacity-modal').toggleClass('acc-edit-fn').removeAttr('style');
            et.toggleClass('acc-edit-fn');  
            clearTimeout(dtf);
            clearTimeout(dts);
        }
    };
0

установить как глобальную переменную

var dtf,dts;

    if(dtf){
            clearTimeout(dtf);
            }
            if(dts){
            clearTimeout(dts);
            }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню