我有一组已定义的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/

10-07 12:42