2010-12-14 61 views
0

我在一個平臺上開發,這個平臺對我如何實現一個適當的後退按鈕有一些限制。一個智能的Javascript後退按鈕,不使用歷史記錄()

,所以我需要創建一個按鈕,做更多的則只是「的javascript:history.back()」

讓我解釋一下:

第1頁 ...點擊進入.. 。
第2頁 ...填寫以下字段並提交給自己...
第2頁?東西=別的 ...這裏是需要後退按鈕

第2頁?東西=別的我想後退按鈕用戶返回到第1頁

第1頁 =可以是任何網頁(所以斜面直接鏈接)

有一個函數,它將知道URL中的變化,並記住頁面提交時的URL?

如果您想了解更多信息,請告訴我。

謝謝

+0

什麼阻止他們點擊瀏覽器中的後退按鈕? – zzzzBov 2010-12-14 17:50:56

+1

@zzzzBov完全同意,只是希望我的項目經理會認爲相同的 – c14kaa 2010-12-14 18:03:09

+0

理解。我假設你正在發送'page2?something = else'部分的表單數據。如果您要將數據發佈到腳本中,則應該發送unique_id以進行檢查以防止意外的雙重提交。 – zzzzBov 2010-12-14 18:07:50

回答

0

有幾種不同的方法可以解決這個問題。

其中第一個取決於假設Page1page2?something=else之間的歷史記錄頁數始終相同。

javascript: window.history.go(-2) 

注意-2這告訴瀏覽器有多少頁回去。

第二種方法會比較費力,但最終更加可靠,那就是在會話中存儲當前用戶的麪包屑(即他們已經轉換的頁面),然後使用會話數據構建背部鏈接。

第三種選擇是通過後面鏈接應該指向的頁面/地址作爲post/get參數通過所有頁面。當用戶點擊後面鏈接出現的頁面時,您可以使用該數據構建後端鏈接。

第四個選擇是將第一個選項與第二個或第三個解決方案組合起來。即通過歷史指望通過對會話/ GET/POST,然後用它來填充該進入的Javascript .go(x)功能,你可以做到這一點是第2頁表單提交期間

+0

你讓它聽起來很簡單。然而,這些選項並不適合我的情況,但是,我認爲你已經把我與合併1與3的正確路線......將在此發佈我的解決方案 – c14kaa 2010-12-14 17:52:08

1

一種方式的數量。它通常會將表單提交給自己,您的腳本會攔截提交操作並替換歷史記錄中的當前項目。爲了做到這一點,就需要重建查詢字符串值:

myForm.onsubmit = function() { 
    var url = this.action, // The URL where the form is submitted 
     els = this.elements, // A list of all the input elements 
     qs = "?",   // The query string we're constructing 
     enc = function (s) { // Function for encoding 
      return encodeURIComponent(s).replace(/%20/g, "+"); 
     }; 

    for (var i=0, max = els.length; i < max; i++) { 
     if (els[i].disabled || !els[i].name) 
      continue; 

     qs += enc(els[i].name) + "=" + enc(els[i].value) + "&"; 
    } 

    // chop off the final ampersand 
    qs = qs.slice(0, -1); 

    // Replace the current entry in the history 
    window.location.replace(action + qs); 

    // Cancel the default form submission 
    return false; 
} 

這可能需要一點點的改進,以滿足您的需求,但你得到的總體思路。現在瀏覽器的後退按鈕和你自己的後退按鈕應該返回到page1。但是,這種方法不適用於POST提交。

相關問題