我有一组已定义的JS函数。我希望用户使用逗号分隔的字符串来选择其中的一个子集。然后,我想从它们的子集中随机选择,并评估所选功能。我有99%的工作人员在工作,除了出于某种原因未进行评估。为什么控制台会不断告诉我“未定义不是函数”?
看一下第37行:http://jsfiddle.net/ftaq8q4m/
// 1 User picks a subset of function names as a comma seperated string.
var effectSubset = 'func4, func5, func6';
// 2 Available functions
function func1() {
$('html').append('func1');
}
function func2() {
$('html').append('func2');
}
function func3() {
$('html').append('func3');
}
function func4() {
$('html').append('func4');
}
function func5() {
$('html').append('func3');
}
function func6() {
$('html').append('func4');
}
var autoPlay = function () {
// 3 Get the user's subset of functions, turn into array
effectArray = effectSubset.split(',');
// 4 Pick random function from array
var effect = effectArray[Math.floor(Math.random() * effectArray.length)];
// 5 run the randomly picked function
window[effect]();
}
// 6 Re-run every second
var playInterval = setInterval(autoPlay, 1000);
最佳答案
我看错了两件事:
您的功能未分配给window
您的"effect"
变量包含前导空格
我已经在这里纠正了以上几点:http://jsfiddle.net/ftaq8q4m/1/
这似乎已经解决了您描述的问题。
例:
window.func1 = function() {
$('html').append('func1');
}
和:
window[effect.trim()]();
更新资料
作为奖励,我修复了您造成误导的附加消息= D
http://jsfiddle.net/ftaq8q4m/5/