窗口onhashchange无法正常工作

Que*_*low 1 html javascript jquery dom

我有一个包含两篇文章的网页.加载此页面后,jQuery用于隐藏两篇文章并向下滑动第一篇文章.用户可以单击导航选项卡查看第二篇文章.然后使用该onhashchange事件单击后退按钮返回第一篇文章.以下是我的HTML代码:

<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>
Run Code Online (Sandbox Code Playgroud)

这是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);
Run Code Online (Sandbox Code Playgroud)

观察到的是,尽管单击后退按钮,页面仍保留在第二篇文章中.我使用的是Firefox 12.0浏览器,不知道是什么导致它无法正常工作.任何帮助表示赞赏.谢谢.

Jos*_*eph 7

您可能想尝试:

window.onhashchange = change;

//and read location.hash in the change function instead
function change(){
    var hash = location.hash;
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么

window.onhashchange = function(){
    change(location.hash);
}
Run Code Online (Sandbox Code Playgroud)
window.onhashchange = change(location.hash);
Run Code Online (Sandbox Code Playgroud)

如果我的JS没有生锈,那就失败了,因为

  • 电话 change()
  • 没有回报的函数 undefined
  • 您要分配undefinedwindow.onhashchange-这是错误的,因为你应该分配function到的事件.

  • @BenHuh要收听事件,你必须*为它分配一个函数*.但在您的情况下,您没有分配功能.你赋予*函数调用的结果*(`change()`的返回值是`undefined`). (3认同)