2013-03-17 89 views
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; 
} 
+0

你看到任何警報?如果沒有,請嘗試在交換機之前設置警報,以確保正確定義位置和散列。 – 2013-03-17 22:15:45

+0

我看到所有警報,但只有在定義了函數名稱的情況下。我不知道爲什麼它會這樣= =( – 2013-03-17 22:25:56

回答

1

不要將函數名稱添加到window.onload的賦值中。

您需要分配一個代替,如

window.onload = function(){ 
    // stuff 
} 
+0

但是,當我使用匿名函數散列檢測不起作用,我得到默認警報 – 2013-03-17 22:24:49

+0

命名一個函數['function' operator](https:// developer .mozilla.org/en-US/docs/JavaScript/Reference/Operators/function)是可選的,但在此處完全有效。 – Dancrumb 2013-03-17 22:28:55

+0

感謝您的支持,我從來沒有在 – anson 2013-03-17 22:32:18

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'); 
} 
+0

謝謝!這非常有用 – 2013-03-17 22:36:10