jQuery mobile останавливает запуск скрипта на текущей странице, используемой после перехода на следующую страницу

В моем мобильном приложении jQuery все сценарии загружаются на странице индекса (скажем, index.php) и не используются никакие (rel="external" или data-ajax="false ") для связывания страниц для полной загрузки приложения с помощью Ajax. Но в моем приложении я хочу запустить скрипт только для одной страницы (скажем, home.php), и после выхода с этой страницы я хочу убить используемый скрипт. В home.php я использую $(document .on('pageinit', function(){ }) для загрузки скрипта.

Но я обнаружил, что скрипт, который я использую в home.php, работает во всем моем приложении после выхода с этой страницы.

Как остановить выполнение скрипта, который используется через функцию page-init без использования (rel="external" или data-ajax="false" >)?

Вот код, который я использую в home.php,

<script type="text/javascript">
                $(document).on('pageinit', function(){
    var auto_refresh = setInterval(
             function ()
            {
                 /*  */
                $("#color-bar").load("controller/file.txt");
                        }, 3000);
                });
</script>

Я хочу прекратить загрузку file.txt после выхода из home.php.


person raduns    schedule 26.08.2013    source источник
comment
дайте вашей странице в home.php идентификатор id="home" и $("#home").on('pageinit', function () { etc... });. это будет работать только для страницы #home. Также вы можете заменить pageinit на pagebeforeshow или pageshow. и используйте pagehide, чтобы остановить интервал $('#home').on('pagehide', function () { clearInterval; });.   -  person Omar    schedule 26.08.2013
comment
Я думаю, что проблема связана с функцией load(), которую я использовал, когда у меня есть какой-то другой код, отличный от load() внутри моей функции, он работает нормально. Есть ли альтернативный способ load() в jQuery Mobile?   -  person raduns    schedule 26.08.2013
comment
нет альтернативы .load() для внешних файлов. Пробовали сбросить интервал?   -  person Omar    schedule 26.08.2013
comment
Нет, он работает так же, как я уже упоминал, но важно отметить, что после обновления моей страницы home.php и добавления rel=external к ссылке он работает нормально, но мне нужно без этого.   -  person raduns    schedule 26.08.2013
comment
Спасибо, Омар, теперь все работает отлично. Я пробовал с pagebeforeshow() , pagehide() и clearInterval().   -  person raduns    schedule 26.08.2013
comment
Извините, в моем предыдущем комментарии была опечатка. rel=external загружает страницу без использования AJAX. интервал очистки с помощью pagehide решил это?   -  person Omar    schedule 26.08.2013


Ответы (1)


Поскольку Омар предложил мне указать идентификатор вместо $(document). Использование pagebeforeshow или pageshow , pagehide и очистки интервала решит эту проблему. Следующий код работает для меня,

var auto_refresh;
$("#light-page").on('pagebeforeshow', function(){
  auto_refresh = setInterval(function () {
    // code
  }, 3000);
});

$('#light-page').on('pagehide', function () { 
  clearInterval(auto_refresh);
});

Добавление идентификатора в HTML:

<div data-role="page" id="light-page">
   </div>
person raduns    schedule 26.08.2013