2012-05-14 74 views
1

我有一個網頁,其中包含兩篇文章。在加載這個頁面時,jQuery被用來隱藏這兩篇文章並將第一篇文章向下滑動。用戶可以單擊導航選項卡查看第二篇文章。然後通過使用onhashchange事件單擊後退按鈕回到第一篇文章。以下是我的HTML代碼:窗口onhashchange不起作用

<nav> 
<a href='#1'>Article 1</a> 
<a href='#2'>Article 2</a> 
</nav> 

<article id=1> 
The first article. 
</article> 

<article id=2> 
The second article. 
</article> 

這裏是javascript代碼:

function change(hash) 
{ 
$('article:visible').slideUp(); 
if(hash != '') 
{ 
    $(hash).slideDown(); 
} 
else 
{ 
    $('article').first().slideDown(); 
} 
} 

$('nav a').click(function(){ 
var id = $(this).attr('href'); 
change(id); 
}); 

$('article').hide(); 
change(location.hash); 
window.onhashchange = change(location.hash); 

觀察什麼是網頁保留在第二篇文章中,儘管單擊後退按鈕。我使用的是Firefox 12.0瀏覽器,不知道是什麼導致它無法工作。任何幫助表示讚賞。謝謝。

+0

控制檯上是否有錯誤? – UVM

+0

@UNNI,沒有錯誤 –

+0

它在其他版本的瀏覽器中工作嗎? – UVM

回答

6

你可能也想嘗試:

window.onhashchange = change; 

//and read location.hash in the change function instead 
function change(){ 
    var hash = location.hash; 
    ... 
} 

window.onhashchange = function(){ 
    change(location.hash); 
} 

window.onhashchange = change(location.hash); 

如果我的JS是不會生鏽的,失敗的原因是

  • 電話change()
  • 功能沒有返回返回undefined
  • 要分配給undefinedwindow.onhashchange - 因爲你應該到function分配到一個事件這是不對的。
+0

你說得對。你能詳細說明最後兩點嗎?對不起,我不太明白。請原諒我可憐的知識...... –

+3

@BenHuh要收聽活動,您必須*爲其分配一個功能*。但在你的情況下,你沒有分配函數。您分配了*函數調用的結果*(「未定義」的change()的返回值)。 – Joseph

+0

我明白了..這是我總是感到困惑的部分。謝謝你的耐心 :) –