我在尝试调用一个将其名称存储在变量中的函数时遇到问题。我在stackOverflow上找到了一些关于我的问题的问题但是,我似乎无法解决我的问题。 根据我的理解,使用
window[functionName]();
应该调用我想要的功能。我创建了jsfiddle,希望能澄清我的问题。 问题是,我没有调用我的函数,而是出现错误:
window [functionName]不是函数
我相信我遗失了一些小事,但经过很长一段时间试图找出问题所在,我决定在这里尝试一下。
答案 0 :(得分:6)
因为你的函数是在onload处理程序中添加的,所以它们是gloabl范围内不可用的方法的本地函数。
在左侧面板的第二个下拉列表中选择no-wrap header / body,然后在dom ready处理程序中添加jQuery处理程序。
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(){}
处理程序中添加脚本,因此您声明的任何函数/变量将在该函数作用域的本地,并且在全局作用域(窗口)中不可用
答案 1 :(得分:2)
这种语法很好用,(使用你的示例小提琴代码)。在这里我明确地将该函数添加到窗口对象。
关于为什么这样做有很多信息On This Question和Arun P Johny的回答给出了一个不错的解释,但基本上它归结为表达一个函数并声明一个函数。
window.one = function() {
alert('one called');
}
答案 2 :(得分: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]();
});
并修复了小提琴: http://jsfiddle.net/Nne6W/