2012-05-14 9 views
1

私は2つの記事を含むWebページを持っています。このページを読み込むと、jQueryが2つの記事を非表示にし、最初の記事をスライドさせます。ユーザーはナビゲーションタブをクリックして2番目の記事を表示できます。その後、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が

  • がを呼び出すので、これは失敗し、錆びない場合にはあなたがイベントにfunctionを割り当てることになっているので、間違っている - あなたはundefinedwindow.onhashchangeにを割り当てるノーリターンリターンundefined
  • を持っていないの
  • 機能。
+0

あなたは正しいです。あなたは最後の2つの点について詳しく説明できますか?申し訳ありませんが、私はかなり理解していません。私の貧しい知識を許してください... –

+3

@BenHuhイベントを聴くには、*関数を割り当てる必要があります。しかし、あなたの場合、あなたは機能を割り当てていません。関数呼び出しの結果*を割り当てました*( 'undefined 'の' change() 'の戻り値)。 – Joseph

+0

私は見る..これは私がいつも混乱する部分です。お待ち頂きまして、ありがとうございます :) –

関連する問題