2013-10-30 396 views
0

基本上,我想構建一個beforehashchange事件。我想在之前執行代碼hashchange事件影響頁面(即:滾動到目標)。如何在hashchange之前執行代碼?

唯一的東西,我知道的,可以改變的哈希值(並導致hashchange事件)是:

  • 點擊<a href="#foo">,在這種情況下,我可以捕獲click事件,並檢查是否有一個鏈接到一個哈希值。
  • 手動更改散列在URL欄,我也許可以忽略(除非有人知道一種方法來檢測這一點,觸發hashchange過嗎?)

是否有其他方式來觸發hashchange

+0

它可以通過腳本'window.location.hash =「測試」' – lastr2d2

+0

改變有什麼如何在不改變我的代碼的情況下將其作爲事件捕獲,我使用'window.location.hash'? – uber5001

回答

0

只有hashchange事件。爲了捕捉散改變之前的一些信息,你可以像data-check-hash一個屬性添加到所有的鏈接標籤:

<a href="#test" data-check-hash>foo</a> 
$('body').on('click', 'a[data-check-hash]', function(e) { 
    e.preventDefault(); 
    var $item = $(e.currentTarget), 
     hashValue = $item.attr('href').slice(1); 

    // here goes your check code before hash change 
    window.location.hash = hashValue; 
    return false; 
}); 
0

我想知道同樣的事情,因爲我想在hashchange事件被觸發前訪問滾動位置。

一種解決方法是使用scroll事件存儲滾動位置,然後在hashchange上對其進行響應。例如,要重置滾動位置,這是什麼點擊錨之前,你可以這樣做:

var X = 0, Y = 0; 
window.addEventListener('scroll', function (e) { 
    X = document.body.scrollTop; 
    Y = document.body.scrollLeft; 
}); 
window.addEventListener('hashchange', function (e) { 
    document.body.scrollTop = X; 
    document.body.scrollLeft = Y; 
}); 

除了訪問滾動位置,我看不出有任何理由,你會需要一個beforehashchange事件。

+0

因爲你沒有看到任何理由,不代表別人看不到。我正在尋找'beforehashchange'事件來根據我的應用程序邏輯取消事件'hashchange'。例如,如果表單正在填充並且用戶點擊另一個鏈接,我想要求用戶確認他是否要離開並導航到該鏈接並丟失所有信息。 –

相關問題