"switch"语句中的函数无法工作

3

我有下面这个Javascript代码。我需要执行一些函数而不是alert(),但它没有起作用……我需要包含 document.getElementById("").innerHTML="" 函数。我对js不是很熟悉,如果有人能解释如何做和问题出在哪里,我将非常感激。

window.onload = function locationHashChanged() {
    var hashx = location.hash;
    switch (hashx) {
       case '#basketball':
           alert('1');
           break;
       case '#football':
           alert('2');
           break;
       default:
           alert('3');
    }
    window.onhashchange = locationHashChanged;
}

你看到任何警报了吗?如果没有,请在切换之前尝试设置警报,以确保位置和哈希值已经正确定义。 - omer schleifer
我可以看到所有的警告信息,但只有在函数名已定义时才能看到。我不知道为什么会出现这种情况 =( - John Johansen
2个回答

1
不要在赋值window.onload时添加函数名称。需要赋值一个匿名函数,例如:
window.onload = function(){
  // stuff
}

但是当我使用匿名函数时,哈希检测不起作用。我会收到默认警报。 - John Johansen
给由function操作符定义的函数命名是可选的,但在这里完全有效。 - Dancrumb
好的。现在它可以使用document.getElementById,但是是否可能为switch case包含任何“function()”? - John Johansen
很好,不过我并不确定你的意思。 - anson
我的意思是,当我用myfunction()替换alert()时,它不起作用。(请原谅我的英语=) - John Johansen
不确定问题是什么,你需要更新上面的示例。 - anson

1
这里最可能的问题是您在加载事件发生后定义了window.onload,这意味着您的处理程序未被调用。要么如此,要么其他代码正在覆盖您的处理程序。
不需要等到window的加载事件才添加hashChange事件处理程序,因此只需使用:
window.onhashchange = function() {
    var hashx = location.hash;
    switch (hashx) {
       case '#basketball':
           alert('1');
           break;
       case '#football':
           alert('2');
           break;
       default:
           alert('3');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接