2013-05-16 31 views
3

我已經成功地實現了jQuery插件BBQ建立一個快速的原型,但是我有我的相關的特定設置一個小問題:jQuery的燒烤 - 檢測當用戶單擊後退按鈕

  • 一個頁面,「#catalogue」,包括使用函數「randomItems()」隨機生成的項目網格,通過hashchange(來自另一個頁面時)觸發。
  • 用戶然後點擊網格中的任何項目以查看#詳細信息頁面
  • 點擊瀏覽器後退按鈕,我想讓用戶查看#catalogue頁面(可以正常工作),但是防止頁面生成一組新的隨機項目onload示出)。

有沒有辦法知道用戶點擊後退按鈕,所以在這種情況下,我不觸發「randomItems()」功能?

回答

0

你需要把物品從randomItems()在緩存:

// save your records here in the cache 
var items = []; 

$(window).on('hashchange', function(){ 
    var page = window.location.hash.replace(/^#/, ''); 

    // check first if items has already records in it and check if page is #catalogue 
    // if not then call randomItems() 
    if (page === 'catalogue' && items.length === 0) { 
     items = randomItems(); 
    } 

    // your code here follows 
}); 
+0

感謝您的快速回復。不幸的是,這樣做會阻止原型的其他區域工作。在**#catalog **頁面中,用戶可以點擊另一個菜單鏈接,該鏈接需要生成一組新的隨機項目。如果我使用你的解決方案,一旦我在目錄中,我無法改變它的內容。不知何故,它需要所有關於使用後退按鈕,如果這甚至可能:) – ale

+0

@ale編輯我的答案。我添加了一個條件,只有當頁面是#catalogue – vher2

+0

時,緩存纔會發生,不幸的是問題仍然是一樣的,因爲從#detailspage可以點擊菜單上的某些內容並觸發一個新的實例,只有新的,隨機項目.. – ale

0

使用瀏覽器的本地存儲來保存該項目。首先創建一個對象的JavaScript表示形式。然後將其存儲在localStorage中。在頁面加載中檢索。請注意,您必須字符串化的複雜對象來存儲它,因爲存儲只接受鍵值對

繼承人一般模式

var foo; 
window.onpageload = function(){ 
    if(localStorage["foo"] == '' | localStorage["foo"] == undefined){ 
    foo = getrandomItems(); //possibly an ajax call; 
    localStorage["foo"] = JSON.stringify(foo); 
    else{ 
    foo = JSON.parse(localStorage["foo"]); 
    } 
}; 

詳見http://diveintohtml5.info/storage.htmlStoring Objects in HTML5 localStorage

0

相信燒烤讓您設置和獲取網址參數,您可以使用這些來確定是否需要隨機選擇。當用戶點擊鏈接到目錄的URL是這樣的:

http://yoururl.com/#catalog 

所以這是目錄和每當「根」上的網址這是你隨機化項目,隨機化項目後,添加一個參數去了網址,使其成爲說:

http://yoururl.com/#catalog?r=1 

當用戶熄滅,着眼於一個項目,然後通過這種方式咔嗒聲歷史性網址將包含r=1,因此你不處理隨機化功能。

function randomiseItems() 
{ 
    // we do not want to randomise 
    if(urlParamIsSet("r")) return; 

    // set url param so gets stored in history (replacing current url) 
    urlSetParam("r",1); 

    //-- do your code here 
} 

代替urlParamIsSet/urlSetParam使用任何功能燒烤爲您提供了操縱URL。

+0

這是一個很酷的答案。我希望它得到嘗試。 – Smandoli