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 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