2014-03-03 38 views
1

有一個非常小的例子來展示我的問題與jquerymobile:JQM刪除我的網頁

JSFiddle - http://jsfiddle.net/forrest_gump/Q73Mk/3/ 

正如你可以看到我叫JQM changePage(),它出現第二個,但它突然被#pageIndex去除

我花了很多時間試圖找出原因!?!我是愚蠢的還是它是一個jqm錯誤?

+0

究竟應該發生在這裏? –

+0

據我瞭解,使用changePage後,JQM應該將活動頁面從#pageIndex更改爲#pageLogin。 –

回答

1

請注意,pageinit會在頁面準備好顯示但仍然隱藏時觸發,因爲事件的順序仍未在該頁面上發生。更改頁面不會阻止那些事件發生,從而導致目標頁面暫時顯示並恢復到上一頁面。

您有這兩種解決方案:

  • 解決方法一:

    延遲changePage使用setTimeout(),以確保所有頁面事件被觸發。

    $(document).on('pagecreate', '#pageIndex', function() { 
        setTimeout(function() { 
         $.mobile.pageContainer.pagecontainer("change", "#pageLogin", { 
          transition: "slideup" 
         }); 
        }, 100); /* 100ms or more */ 
    }); 
    

    注:pageinit已被廢棄,用pagecreate取代。另外,$.mobile.changePage被替換爲$.mobile.pageContainer.pagecontainer("change", "#page", { options });

    Demo


  • 解決方法二:

    pagebeforechange事件來決定首先顯示的頁面。

    $(document).on("pagebeforechange", function (e, ui) { 
        if (ui.toPage[0].id == "pageIndex" && typeof ui.options.fromPage === "undefined") { 
         $.mobile.pageContainer.pagecontainer("change", "#pageLogin", { 
          transition: "slideup" 
         }); 
         e.preventDefault(); 
        } 
    }); 
    

    Demo

+0

如果我正確理解你,那麼pageshow事件應該會有所幫助(因爲該頁面已經顯示),但它已經證明了! 另外我不明白你爲什麼在第二種解決方案中使用這種條件。在這種情況下,pageIndex永遠不會加載,對吧? –

+1

@DmitryIsakov它不會幫助,因爲'pageshow'是'pagechange'之後的另一個事件。 – Omar

+0

我也嘗試過pagechange事件,但它也不起作用。 –