Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript函数调用中循环变量?_Javascript_Jquery_Function_Loops_Variables - Fatal编程技术网

如何在Javascript函数调用中循环变量?

如何在Javascript函数调用中循环变量?,javascript,jquery,function,loops,variables,Javascript,Jquery,Function,Loops,Variables,对于jQuery中的一系列类似单击事件,我有以下循环。除了下面带有注释的最后一行之外,一切正常。如何使每个循环迭代分别调用这些函数:step1()、step2()、step3()等等 (i=0;i

对于jQuery中的一系列类似单击事件,我有以下循环。除了下面带有注释的最后一行之外,一切正常。如何使每个循环迭代分别调用这些函数:step1()、step2()、step3()等等

(i=0;i<7;i++)的
{
$(“#步进框”+i)。单击(函数(){
$(“#步骤”+i).show();
$(“#stepswraper section”).not(“#step”+i.hide();
$(“#stepbox”+i).addClass(“stepboxactive”);
$(“#stepboxmain div”).not(“#stepbox”+i).removeClass(“stepboxactive”);
step+i();//我被卡在这里了。这不适用于创建函数调用step1()、step2()等。
});
}

假设您的函数是在全局上下文中定义的:

for (i = 0; i < 7; i++) {

    $("#stepbox" + i).click(function(){
        $("#step" + i).show();                     
        $("#stepswrapper section").not("#step" + i).hide();
        $("#stepbox" + i).addClass("stepboxactive");
        $("#stepboxmain div").not("#stepbox" + i).removeClass("stepboxactive");
        window["step" + i]();
    });
}
(i=0;i<7;i++)的
{
$(“#步进框”+i)。单击(函数(){
$(“#步骤”+i).show();
$(“#stepswraper section”).not(“#step”+i.hide();
$(“#stepbox”+i).addClass(“stepboxactive”);
$(“#stepboxmain div”).not(“#stepbox”+i).removeClass(“stepboxactive”);
窗口[“步骤”+i]();
});
}

创建一个step函数数组

var step = [
  function () { /* step 0 */ },
  function () { /* step 1 */ },
  function () { /* step 2 */ }
  // ...
];
for (i = 0; i < 7; i++) {
    $("#stepbox" + i).click(function(){
        $("#step" + i).show();                     
        $("#stepswrapper section").not("#step" + i).hide();
        $("#stepbox" + i).addClass("stepboxactive");
        $("#stepboxmain div").not("#stepbox" + i).removeClass("stepboxactive");
        step[i]();
    });
}
var步骤=[
函数(){/*步骤0*/},
函数(){/*步骤1*/},
函数(){/*步骤2*/}
// ...
];
对于(i=0;i<7;i++){
$(“#步进框”+i)。单击(函数(){
$(“#步骤”+i).show();
$(“#stepswraper section”).not(“#step”+i.hide();
$(“#stepbox”+i).addClass(“stepboxactive”);
$(“#stepboxmain div”).not(“#stepbox”+i).removeClass(“stepboxactive”);
步骤[i]();
});
}

步骤1、步骤2、步骤3的功能是全局的吗?如果是这样,您至少可以执行
window['step'+i]()
,将函数放入数组中。但是为什么需要动态调用这样的函数呢?setTimeout可能重复(“step1()”,0)@将字符串传递给setTimeout的图例与调用eval()完全相同。当然,这可能有效。但需要这样做是一个主要的代码气味。UUUUU我可以从这里闻到:D@dave我尝试了两种方法,但都不起作用。下面是我的代码的结构:$(文档).ready(函数(){$(“#stepbox1”).click(函数(){$(“#step1”).show();$(“#stepswrapper节”).not(“#step1”).hide();$(“#stepbox1”).addClass(“stepboxactive”);$(“#stepboxmain div”).not(“#stepbox1”).removeClass”(“stepboxactive”);step1());//…再加上三个单击函数。然后:函数step1(){//Stuff here}//…再加上三个从按钮调用的函数});
var step = [
  function () { /* step 0 */ },
  function () { /* step 1 */ },
  function () { /* step 2 */ }
  // ...
];
for (i = 0; i < 7; i++) {
    $("#stepbox" + i).click(function(){
        $("#step" + i).show();                     
        $("#stepswrapper section").not("#step" + i).hide();
        $("#stepbox" + i).addClass("stepboxactive");
        $("#stepboxmain div").not("#stepbox" + i).removeClass("stepboxactive");
        step[i]();
    });
}