2013-07-05 49 views
3

我有一個網站上有幾個標籤。如果我點擊一個選項卡的方式變更網址:點擊幾個標籤(URL隨着哈希變化)然後瀏覽器後退按鈕一個網站返回?

www.example.com/site1.html#tab-2 
www.example.com/site1.html#tab-5 

所以,如果我點擊兩個標籤(網址變更兩次),然後點擊瀏覽器的歷史後退按鈕,然後瀏覽器首先瀏覽所有網址更改,然後才能在我看到的網站之前最終來到網站。

如何避免這種情況?如果我點擊瀏覽器的歷史背比唐我想跳到最後一頁,無論我有多少標籤點擊之前(多少次的URL改變了這種方式)

親切的問候

+0

你在做當你點擊選項卡上的服務器請求? –

回答

3

無特定的HTML或JavaScript的使用情況,很難縮小最佳方法。也就是說,在處理歷史狀態和散列時,工具包中確實有三個重要的工具。

防止

您也可以通過在你的標籤處理程序代碼中使用event.preventDefault();docs),像這樣避免了整個問題的變化:

$('.tab').on('click', function (e) { 
    e.preventDefault(); 
    ... 
}); 

當用戶點擊標籤,您立即致電preventDefault - 這將停止默認操作繼續。在這種情況下,您正在阻止鏈接的默認行爲(假定)更改文檔的URL。 ...表示用於處理選項卡單擊操作的現有代碼。這可能是「最好」的方法;而且,至少,它更容易。

檢測到改變

您可以使用onhashchange事件window對象(docs,注意有限的瀏覽器支持)來檢測對哈希。

window對象的onpopstate事件可以以類似的方式(docs)一起使用,但是這是一個微妙的不同,並可能取決於你如何貫徹「標籤」更合適,以及是否需要監視歷史狀態的其他更改。

$(window).on('hashchange', function (e) { 
    console.log('hash change', e); 
}); 

$(window).on('popstate', function (e) { 
    console.log('popstate', e); 
}); 

同時看到在這裏的行動:http://jsfiddle.net/m7qV9/1/一定有您的控制檯打開

無論使用哪種方法,你將使用history對象(docs)來管理替換或增加歷史,取決於需要。

一種方法:更換

下面是使用history.replaceState一小部分。通過這種方法,您可以將活動選項卡的標識符保留在URL中,以便用戶可以回到歷史記錄中的位置,但不會在每個更改的選項卡中混淆其歷史記錄。例如,http://www.mySite.com/#tab2會在加載頁面時打開標籤頁2,但如果用戶切換到標籤頁1,轉到另一個頁面,然後返回,標籤頁#1將被激活。

請記住,這是概念的模型。我不知道你現有的HTML和JavaScript是什麼樣的,所以我只是展示了一種方法,並沒有爲你的具體實現創建一個直接的解決方案。

$('.tab').on('click', function (e) { 
    e.preventDefault(); 
    var whichtab = $(this).attr('href'); 
    $(this).parent().find('.active').removeClass('active'); 
    updateTab(whichtab, $(this).parent()); 
    return false; 
}); 
$(document).ready(function() { 
    if (document.location.hash.length > 0) 
     updateTab(document.location.hash); 
}); 
var updateTab = function (tab, parent) { 
    if (!parent) 
     parent = document; 
    if (parent.find('.tab[href='+tab+']').length < 1) 
     return; 
    parent.find('.tab[href='+tab+']').addClass('active'); 
    parent.find('.tabContent-'+tab.replace('#', '')).addClass('active'); 
    window.history.replaceState({}, '', tab); 
    return true;  
}; 

這裏試試:http://jsfiddle.net/5Qegc/

沒有什麼JavaScript的一個更好的想法和你使用HTML,這是很難做到準確。希望這可以幫助。

文檔

-2

也許你可以在你的錨標籤的href屬性中使用'javascript:void(0)'。

這樣

</`<a href = 'javascript:void(0)'>Tab-2</a>` 
相關問題