有一個非常小的例子來展示我的問題與jquerymobile:JQM刪除我的網頁
JSFiddle - http://jsfiddle.net/forrest_gump/Q73Mk/3/
正如你可以看到我叫JQM changePage(),它出現第二個,但它突然被#pageIndex去除
我花了很多時間試圖找出原因!?!我是愚蠢的還是它是一個jqm錯誤?
有一個非常小的例子來展示我的問題與jquerymobile:JQM刪除我的網頁
JSFiddle - http://jsfiddle.net/forrest_gump/Q73Mk/3/
正如你可以看到我叫JQM changePage(),它出現第二個,但它突然被#pageIndex去除
我花了很多時間試圖找出原因!?!我是愚蠢的還是它是一個jqm錯誤?
請注意,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 });
。
解決方法二:
聽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();
}
});
如果我正確理解你,那麼pageshow事件應該會有所幫助(因爲該頁面已經顯示),但它已經證明了! 另外我不明白你爲什麼在第二種解決方案中使用這種條件。在這種情況下,pageIndex永遠不會加載,對吧? –
@DmitryIsakov它不會幫助,因爲'pageshow'是'pagechange'之後的另一個事件。 – Omar
我也嘗試過pagechange事件,但它也不起作用。 –
究竟應該發生在這裏? –
據我瞭解,使用changePage後,JQM應該將活動頁面從#pageIndex更改爲#pageLogin。 –