2014-05-23 3 views
0

У меня есть небольшая функция, которая позволяет обрабатывать всплывающие окна на моей странице, и есть небольшая проблема с clearTimeout. Пожалуйста, обратите внимание на код: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 с «задержкой»> 0, он будет вызывать автоматическое закрытие после определенного значения. Но если во всплывающем окне есть кнопка, которая позволяет закрыть ее перед таймером, всплывающее окно появится сразу после запуска таймера. Я попытался очистить таймауты с помощью clearTimeout(), но ошибка все еще существует. Вы можете проверить это на скрипке здесь: http://jsfiddle.net/LvVu9/ просто нажмите красную кнопку, а затем нажмите кнопку «ОК».

+1

проблема Область видимости переменной – asprin

+3

http://jsfiddle.net/satpalsingh/LvVu9/1/, перемещение вашей переменной внешней области – Satpal

ответ

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); 
      } 
Смежные вопросы