如何动态调用javascript函数

时间:2011-04-11 07:17:19

标签: javascript

我需要在一段延迟后动态调用javascript函数,函数display_1,2,... n将被动态构造。我的脚本看起来像这样,但是如果我使用下面的代码,函数永远不会被触发,但如果我对函数进行硬编码,它似乎没问题。

function display_1() {
alert(1);
}

function display_2() {
alert(2);
}

function display() {
var prefix = 'display_';
for(var i = 1; i < 3; i++) {
setTimeout(prefix.concat(i), 1000);
}

window.onload = display();

5 个答案:

答案 0 :(得分:5)

您可以将函数分组为数组,而不是通过字符串:

function display_1() {...}

function display_2() { ... }

var functions = [ display_1, display_2 ];

function display() {
   for( var i = 0; i != functions.length; ++i ) { 
     setTimeout( functions[i], 1000 );
   }
 }

如果你想更进一步,你甚至可以省略显式的函数名称:

var functions = [
    function() { /*the function_1 implementation*/ 
    },
    function() { /*the function_2 implementation*/
    }
];

答案 1 :(得分:2)

答案 2 :(得分:1)

应该是

function display_1() {
alert(1);
}

function display_2() {
alert(2);
}

function display() {
var prefix = 'display_';
for(var i = 1; i < 3; i++) {
setTimeout(prefix.concat(i)+'()', 1000);
}
}

window.onload = display;
  1. 传递给setTimeout的字符串应该调用函数
  2. onload应设置为函数,而不是其返回值

答案 3 :(得分:0)

setInterval('load_testimonial()',5000);//first parameter is your function or what ever the code u want to execute, and second is time in millisecond..

这将帮助您在每个给定时间执行您的功能。

答案 4 :(得分:0)

如果你真的希望在执行函数之间有1000毫秒的延迟,你可以这样做:

window.onload = function() {
    var n = 0;
    var functions = [
        function() {
            alert(1);
            setTimeout(functions[n++], 1000);
        },
        function() {
            alert(2);
            setTimeout(functions[n++], 1000);
        },
        function() {
            alert(3);
        }
    ];
    setTimeout(functions[n++], 1000);
};

(如果需要,以较少的重复性重写它)