2016-09-08 3 views
0

У меня есть setinterval, который рунирует каждые 5 секунд. это прекрасно работает при загрузке страницы.Как запустить javascript setinterval после очистки?

У меня есть следующие сценарии: стр

  1. нагрузки с интервалом (РАБОТЫ)
  2. нажмите кнопку и загрузить новое содержание и Стопп интервал (РАБОТЫ)
  3. После того, как новое содержание (НЕ ДЕЛАЕТ)
  4. У меня есть сейф tys такие как события для window.blur, которые также останавливают интервал, так что браузер не будет компрометировать все отсутствующие интервалы, если я буду менять вкладки или что-то еще. Имейте в виду, что шаг 3 не работал BUT, если после 3-го шага изменить вкладку, а затем вернуться к исходной странице (выполнить размытие), интервал снова начнет работать.

УКАЗАНИЕ все содержимое загрузка здесь кроме загрузки страницы выполняется с помощью вызовов ajax.

Мой код:

инициализацией:

 $.automation.worker.bindIntervalEvent("#TanksContent", "/Tank/GetTanks", function() { 
      $.automation.tanks.tableInit(); 
     }); 

связывающую функцию:

bindIntervalEvent: function (target, url, callback) { 
     $(window) 
      .on("focus.mine", 
       function() { 
        $.automation.worker.setUpdateInterval(target, url, callback); 
       }) 
      .on("blur", 
       function() { 
        $.automation.worker.stopUpdateInterval(); 
       }).trigger("focus.mine"); 
    } 

интервал функции:

setUpdateInterval: function (target, url, callback) { 
     if ($.automation.globals.globalInterval.value.length === 0) { 

      $.automation.globals.globalInterval.value.push(window.setInterval(
       function() { 
        var options = { 
         loadTarget: target 
        } 
        $.automation.worker.getView(url, 
         function() { 
          if (callback) 
           callback(); 
         }, 
         options); 
       }, 
       5000)); 
     } 
    } 

функция, которая останавливает интервал:

stopUpdateInterval: function() { 
     if ($.automation.globals.globalInterval.value.length === 0) 
      return; 

     console.log("deleting"); 

     for (var i = 0; i <= $.automation.globals.globalInterval.value.length; i++) { 
      window.clearInterval($.automation.globals.globalInterval.value[i]) 

      $.automation.globals.globalInterval.value.splice(i, 1); 
      console.log($.automation.globals.globalInterval.value.length); 
     } 
    } 

при остановке интервала я также удалить окно привязок:

unBindIntervalEvent: function() { 
     $(window).off("focus.mine"); 
     $(window).unbind("blur"); 
    } 

Назад к шагу 3:

Мой метод sucess в обратный вызов моему getviewfunction идентичен тому, что я исполняю в коде начало :

 $(".updatelatest") 
      .on("click", 
       function() { 
        var _this = $(this); 
        var options = { 
         loadTarget:"#TanksContent" 
        } 
        $.automation.worker.getView("/Tank/GetTanks", 
         function (data) { 
          $(_this).switchClass("col-md-5", "col-md-1", 1000, function() { 
           $(_this).addClass("hidden"); 
           $(".search").switchClass("col-md-5", "col-md-12", 1000, "easeInOutQuad"); 
          })         
          $.automation.tanks.tableInit(); 
          $.automation.worker.bindIntervalEvent("#TanksContent", "/Tank/GetTanks", function() { 
           $.automation.tanks.tableInit(); 
          }); 
          $(window).trigger("blur"); 
         }, options); 
       }); 

, но это не начинается интервал. он явно инициализирован, так как он работает, когда window.blur выполняется, например, когда я меняю вкладку, но по какой-то причине это не работает за ее пределами.

Я попытался запустить событие размывания окон, и ничего не произошло, я попытался запустить мое пользовательское событие окна «focuse.mine», но ничего не происходит.

Я не замечал этого во время разработки, так как у меня открылся firebug, и каждый раз, когда я проверял скрипты или css или консоль, функция размытия выполнялась, поэтому я предположил, что мой код работает так, как планировалось, но теперь, когда он развернут, я замечаю это ,

Моя голова колотится за разум, и я не могу понять, где я ошибся.

ответ

0

Ну, это было весело. Я просто обнаружил, что при вызове setUpdateInterval(); функция напрямую дала мне удачный результат.

Я понял, что причина, по которой я их разделила, как и я, была причиной размытия. «Focus.mine» запускается, чтобы снова запустить inteval, и пользователь возвращается на страницу.

Смежные вопросы