2013-12-17 78 views
2

我在尝试调用将其名称存储在变量中的函数时遇到问题。我发现了一些关于stackoverflow的问题,但仍然无法解决我的问题。 从我的理解,使用变量中的函数名称

window[functionName](); 

应该叫我想要的功能。我创建了一个jsfiddle,我希望能够澄清我的问题。 的问题是,这不是我的函数被调用我得到一个错误:

window[functionName] is not a function

我相信这是我丢失了一些小东西,但时间长了之后,花了试图找出问题所在,我决定在这里尝试一下。

+0

如果你要称呼其为window'的'属性,你首先必须使你的函数成为'window'的属性。 –

+2

这是你的小提琴的问题。默认情况下,jsfiddle自动将代码封装在一个准备好的处理程序中,所以你的函数不在全局范围内。你可以告诉jsfiddle你不想要你的代码包装(在你选择你想要的jquery的左下角):http://jsfiddle.net/Cwhwx/ –

回答

6

因为你的函数在一个onload处理加入,使他们是本地的gloabl范围内不可用的方法。

在左侧面板的第二个下拉列表中选择no-wrap header/body,然后将您的jQuery处理程序添加到dom ready处理程序中。

function one() { 
    alert('one called'); 
} 

function two() { 
    alert('two called'); 
} 

function three() { 
    alert('three called'); 
} 

jQuery(function() { 
    jQuery("button").bind("click", function() { 
     var funcName = "one"; 
     window[funcName](); 
     //alert('here'); 
    }); 
}) 

演示:Fiddle

的jsfiddle增加在window.onload = function(){}处理器默认脚本,所以任何函数/变量声明会有局部的功能范围,并不会在全球范围内提供(窗口)

+0

感谢您的回答,我会尽快接受它。还有一个问题。有什么办法可以调用在window.onload中创建的函数吗? – relysis

+0

@relysis请参阅http://jsfiddle.net/arunpjohny/L4B2c/2/ –

+0

非常感谢您的帮助!本来会给+1,但是我的声望不允许我 – relysis

2

WORKING JS FIDDLE

这句法(从你的例子提琴使用的代码)的作品就好了。在这里我明确地将该函数添加到窗口对象。

有很多关于为什么这项工程On This Question和Arun P Johny的答案给出了一个体面的解释信息,但基本上归结为表达一个函数和声明一个函数。

window.one = function() { 
    alert('one called'); 
} 
+3

你应该解释为什么代码有效,所以OP知道什么修理。 – srquinn

+0

@jibsales对不起,我在回答后立即跳上即兴会议。但现在,这已经得到更彻底的回答,提供一个链接到信息资源似乎应该就足够了。 – Rooster

0

您在设定功能方面存在问题。你可以这样来做:

我改变你的代码:

window.one = function(){ 
    alert('one called'); 
} 
window.two = function() { 
    alert('two called'); 
} 
window.three = function() { 
    alert('three called'); 
} 

jQuery("button").on("click", function() { 
    var funcName = window.prompt("What function to fire?",""); 
    window[funcName](); 
}); 

和固定的小提琴: ​​