2013-02-28 77 views
2

的哈希值調用JavaScript函數我目前有這樣的代碼在網頁加載從哈希值調用一個函數:從命名空間

$(function() { 
    var hash = window.location.hash.substring(1); 
    window[hash](); 
}); 

這個偉大的工程。

然而,我在Javascript命名空間,像這樣:

var help = { 
      faq: function() { 
       //do stuff 
      }, 

      newFeatures: function() { 
       //do stuff 
      } 
    } 

我的功能,我列出以下頂部命名空間的JavaScript不起作用。我試過手動添加命名空間到前面(所以var hash = "help." + window.location.hash.substring(1);),但沒有奏效。

如何解決此問題而不從命名空間中刪除我的Javascript?

回答

3

這應該工作:

$(function() { 
    var hash = window.location.hash.substring(1); 
    window.help[hash](); 
}); 

在JavaScript點符號和括號是可以互換的,只要關鍵是有效的JavaScript標識。 (否則,您必須使用方括號內。)

所以,你也可以做到這一點(雖然點符號更易讀):

$(function() { 
    var hash = window.location.hash.substring(1); 
    window["help"][hash](); 
}); 
+0

這很棒。謝謝!我會盡快接受。 – Johannes 2013-02-28 22:21:30

1

我使用其中I存儲在哈希對象值的類似方法。

我的技術:

  • 使用點在哈希展現層次 - 你的情況:#help.faq
  • 運行一個腳本來轉換點符號和檢索的實際值

現場演示:http://jsfiddle.net/Kn4w2/1/

代碼示例:

var hashArray=hash.split("."), 
    myMethod=window; 
for (var i=0;i<hashArray.length;i++){ 
     myMethod=myMethod[hashArray[i]]; 
} 

唯一的約束是當然你的方法名不應該包含一個點。

+0

我真的很喜歡這個解決方案,它很容易允許多個名稱空間,我可以重複使用相同的功能。我感謝你的意見。謝謝! – Johannes 2013-03-01 20:16:10

+0

絕對!我實際上將它用於具有兩個以上級別的一般情況(例如#help.faq.question1),但隨着您需要添加驗證步驟,代碼變得更加複雜。 – Christophe 2013-03-01 20:48:39

+0

我實際上正在考慮將Web項目轉換爲單頁應用程序,並且像這樣的設置會使映射到控制器,並且使用javascript和ajax輕鬆實現操作。 – Johannes 2013-03-02 00:59:07