2013-02-28 130 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