2012-05-17 39 views
3

這讓我感到困惑,恐怕我可能會做一些非常愚蠢的事情。重新加載頁面;錨鏈接被忽略,以前的滾動位置受到青睞?

我有一個表單,它執行ajax調用,並在成功時重新加載(相同)頁面,並使用URL哈希/碎片跳轉到頁面底部提交的數據。

window.location.href = "/this/url/#post-10"; 
window.location.reload(); 

... 

<div id="post-10">...</div> 

我注意到,至少在Chrome中,先前的滾動位置被看好在錨鏈接我提供的 - 這樣的頁面重新加載,成功地跳到我id錨,但是一旦在頁面加載完成後,它跳轉到前一頁上滾動的位置。

這是標準行爲嗎?解決這個問題的最好方法是使用onLoad或類似的東西來簡單地強制頁面位置?

回答

2

window.location.href = "/this/url/#post-10";將自行工作,不需要第二次重新加載頁面,這將(據我所知)贊成先前的滾動位置。

+0

因爲我重新加載當前頁面,似乎不刷新頁面,只是坐在那裏。我想這可能與緩存有關? –

+0

好吧,這似乎應該工作,但出於某種奇怪的原因,changineg'window.location.href'在我的ajax調用的'success'回調不起作用 –

1

如果您使用ajax,爲什麼重新加載頁面?

只需卸下線window.location.reload();

window.location.href = "/this/url/#post-10";足以採取滾動到post-10部。

順便說一句,更好的(酷)方法是使用滾動效果。

var targetOffset = $('#post-10').offset().top ; 
var scrollElem = scrollableElement('html', 'body'); 

$(scrollElem).animate({scrollTop: targetOffset}, 400, function() { 
    // scroll is complete 
     location.hash = 'post-10'; 
}); 

    // Use the first element that is "scrollable" (cross-browser fix?) 
function scrollableElement(els) { 
    for (var i = 0, argLength = arguments.length; i <argLength; i++) { 
     var el = arguments[i], 
     $scrollElement = $(el); 
     if ($scrollElement.scrollTop()> 0) { 
      return el; 
     } else { 
      $scrollElement.scrollTop(1); 
      var isScrollable = $scrollElement.scrollTop()> 0; 
      $scrollElement.scrollTop(0); 
      if (isScrollable) { 
       return el; 
      } 
     } 
    } 
    return []; 
} 
+0

感謝您的答覆。這是一個好主意,不幸的是,ajax回覆不更新頁面,它只是提交數據。然後需要重新加載頁面以查看更改。這是目前我無法控制的,所以我需要一種方法來讓它工作 –

+0

'/ this/url /'是調用ajax的同一頁嗎? – Jashwant

+0

我在頁面'/ url/a /'裏面使用ajax提交數據到'/ url/b /'和ajax提交的後繼,我想重新加載頁面'/ url/a /#評論' –

相關問題