如何从变量中创建一个值作为函数名?

时间:2011-03-24 10:18:56

标签: javascript jquery function variables

我创建了一个从json创建动态菜单的练习程序。然后,每次单击该动态菜单时,都会出现一个选项卡,其中包含一个选项卡名称,具体取决于您单击的选项卡的名称。

我现在想要的是,我还在搞清楚,每当我点击菜单时,它会调用一个与我点击的菜单名称相同的功能。但我只是不知道该怎么做。我的js函数是一个单独的文件。这是代码:

    ....
    $('.menu').click(function () {
       dyna_tabs.add('Tab' + $(this).attr("rel"),  //this is for the <a href= "-">
       $(this).attr("rel"),                         //this if for the title
       $(this).html());                             // for the tab_content
       fname = $(this).html();                     // this is my variable name which i plan to use as function name
       alert('this would be my function name ' + fname);
       fname();
    }); 
    ....

您可以找到动态标签代码here的其余部分。我刚做了一些编辑,可以从菜单中创建菜单然后选项卡。

所以......我输入fname();,其中fname包含所谓的我的函数名称的值。但每次我运行我的程序时,错误消息显示“fname不是函数”。这里的任何人都知道如何做到这一点吗?请....

还有一件事,是否有人知道如何将一些HTML代码放入我的动态标签中。或者里面的.html页面?谢谢你的阅读

2 个答案:

答案 0 :(得分:3)

您可以使用另一个调用必要功能的功能。像:

loader(fname);

function loader(s) {
  switch(s) {
    case 'xy': xy(); break;
    ...
  }
}

您的其他选择可能是将您的功能存储在对象中:

var myFunctions={
  'xy' : function () {
    //do something here
  },
  ...
};

然后你可以轻松地打电话给他们:

myFunctions[fname];

这些不是完整的解决方案,只是您可以遵循的一些指导原则。优于eval的优势在于,使用这些解决方案,您无法运行的功能无法运行。只能调用预定义的。

答案 1 :(得分:1)

我会提前为此道歉。

eval(fname + '()');

应该有效

根据这个问题(How to execute a JavaScript function when I have its name as a string),有一些更好的选择。