使用带有循环的settimeout()的javascript

使用带有循环的settimeout()的javascript,javascript,arrays,loops,multidimensional-array,settimeout,Javascript,Arrays,Loops,Multidimensional Array,Settimeout,我有一张有8x10个电池的桌子。。每个sell都有一个具有自己id的输入元素(11,12,…,21,22,23,…) 现在我想在之后填充这些输入(比如说0.5秒) 我刚刚输入了一些测试值 Betrag = new Array(); Betrag[0] = new Array(); Betrag[1] = new Array("asd","asd","asd","asd","asd","asd","asd","asd","asd","asd","51

我有一张有8x10个电池的桌子。。每个sell都有一个具有自己id的输入元素(11,12,…,21,22,23,…) 现在我想在之后填充这些输入(比如说0.5秒) 我刚刚输入了一些测试值

        Betrag = new Array();
        Betrag[0] = new Array();
        Betrag[1] = new Array("asd","asd","asd","asd","asd","asd","asd","asd","asd","asd","513.000,00");
        Betrag[2] = new Array("asd","adsd","asd","asd","asd","asd","asd","asd","asd","asd","asd");
        Betrag[3] = new Array("asd","asd","asd","asd","asd","asd","asd","asd","asd","asd","asd");
        Betrag[4] = new Array("asd","uisgui","asd","asd","asd","asd","asd","asd","asd","asd","asd");
        Betrag[5] = new Array("asd","asd","asd","asd","asd","asd","asd","asd","asd","asd","asd");
        Betrag[6] = new Array("asd","asd","asd","asd","asd","asd","asd","asd","asd","asd","asd");
        Betrag[7] = new Array("asd","asd","asd","asd","asd","asd","asd","asd","asd","asd","asd");
        Betrag[8] = new Array("asd","asd","asd","asd","asd","asd","asd","asd","asd","asd","asd");

          for(i=1; i<=8; i++){
            for(k=1; k<=10; k++){
              setTimeout(function schreiben(){document.getElementById(''+i+k+'').value= Betrag[i][k];}, 1000);
              //document.getElementById(''+i+k+'').value= Betrag[i][k];
            }
          }
Betrag=newarray();
Betrag[0]=新数组();
Betrag[1]=新阵列(“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“513.000,00”);
Betrag[2]=新阵列(“asd”、“adsd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”);
Betrag[3]=新数组(“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”);
Betrag[4]=新数组(“asd”、“uisgui”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”);
Betrag[5]=新数组(“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”);
Betrag[6]=新阵列(“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”);
Betrag[7]=新数组(“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”);
Betrag[8]=新阵列(“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”、“asd”);

for(i=1;i
k
i
for
循环结束后读取(精确为1秒)。它们的值分别为9和11,导致数组溢出问题

修复它的一个选项是创建一个执行该操作的函数,并从
k
i
变量创建一个固定字符串来调用它:

function schreiben(__i, __k) {
   document.getElementById(''+__i+__k+'').value= Betrag[__i][__k];
}
然后按如下方式调用
setTimeout

setTimeout("schreiben("+i+","+k+")", 1000);
    var i = 1;
    var k = 1;
    var obj = setInterval( function () {
        document.getElementById(i + '' + k).value= Betrag[i][k];
        if(k <= 10)
           k++;
        else
        {
            k = 1;
            if(i<=8)
                 i++;
            else
                 clearInterval(obj);
        }
    }, 1000);

这不是最优雅的方式,但它可以工作。

k
i
for循环结束后读取(精确地说是1秒)。它们的值分别为9和11,导致数组溢出问题

修复它的一个选项是创建一个执行该操作的函数,并从
k
i
变量创建一个固定字符串来调用它:

function schreiben(__i, __k) {
   document.getElementById(''+__i+__k+'').value= Betrag[__i][__k];
}
然后按如下方式调用
setTimeout

setTimeout("schreiben("+i+","+k+")", 1000);
    var i = 1;
    var k = 1;
    var obj = setInterval( function () {
        document.getElementById(i + '' + k).value= Betrag[i][k];
        if(k <= 10)
           k++;
        else
        {
            k = 1;
            if(i<=8)
                 i++;
            else
                 clearInterval(obj);
        }
    }, 1000);

这不是最优雅的方法,但它是有效的。

巴特·弗里德里克斯是对的。不确定为什么要这样做,但可以在schreiben函数中声明几个变量,并在同一个screiben函数中递增它们。

巴特·弗里德里克斯是对的。不确定为什么要这样做,但可以声明几个v在schreiben函数中使用ars,并在同一个screiben函数中增加它们。

您可以尝试以下方法:

setTimeout("schreiben("+i+","+k+")", 1000);
    var i = 1;
    var k = 1;
    var obj = setInterval( function () {
        document.getElementById(i + '' + k).value= Betrag[i][k];
        if(k <= 10)
           k++;
        else
        {
            k = 1;
            if(i<=8)
                 i++;
            else
                 clearInterval(obj);
        }
    }, 1000);
var i=1;
var k=1;
var obj=设置间隔(函数(){
document.getElementById(i+''+k).value=Betrag[i][k];

如果(k您可以尝试以下方法:

setTimeout("schreiben("+i+","+k+")", 1000);
    var i = 1;
    var k = 1;
    var obj = setInterval( function () {
        document.getElementById(i + '' + k).value= Betrag[i][k];
        if(k <= 10)
           k++;
        else
        {
            k = 1;
            if(i<=8)
                 i++;
            else
                 clearInterval(obj);
        }
    }, 1000);
var i=1;
var k=1;
var obj=设置间隔(函数(){
document.getElementById(i+''+k).value=Betrag[i][k];

如果(k这应该是你想要的方式

for(i=1; i<=8; i++){
    for(k=1; k<=10; k++){
        (function(i, k){
            setTimeout(function schreiben(){document.getElementById(''+i+k+'').value= Betrag[i][k];}, 1000*k + 10000*i);
            //document.getElementById(''+i+k+'').value= Betrag[i][k];
        })(i, k);
    }
}

for(i=1;i这应该是您想要的方式

for(i=1; i<=8; i++){
    for(k=1; k<=10; k++){
        (function(i, k){
            setTimeout(function schreiben(){document.getElementById(''+i+k+'').value= Betrag[i][k];}, 1000*k + 10000*i);
            //document.getElementById(''+i+k+'').value= Betrag[i][k];
        })(i, k);
    }
}


for(i=1;i你有没有试过提醒Betrag[1][1]看看它会返回什么?当我运行它时,
i
变成9,
k
变成11。可能是线程问题。setTimeout(函数schreiben(){alert(Betrag[1][1]),1000)工作正常(好吧,这是一个无休止的循环)^得到“asd”在“警报”窗口中,您是要同时填充所有输入,还是一个接一个地填充(其间有延迟)?有关发生这种情况的原因以及解决方法的说明,请参阅。您是否尝试向Betrag[1][1]发出警报要查看它返回什么?当我运行它时,
I
变为9,
k
变为11。可能是线程问题。setTimeout(函数schreiben(){alert(Betrag[1][1])},1000);工作正常(很好,这是一个无休止的循环^^)在警报窗口中获取“asd”您想同时填充所有输入,还是一个接一个地填充所有输入(两者之间有一个延迟)?请参阅,以了解为什么会发生这种情况,以及如何解决它。好的,我如何解决这个问题?抱歉,我对javascriptI非常陌生,我正在尝试修复…:)嗯,在某个地方出错了。只有函数,然后调用?你必须把函数放在循环之外。把它放在
Betrag=new Array()之前
例如。好吧,ure代码对我很有效,但现在值都在一起了..希望它像在第一个输入中填充值一样,然后在下一个输入字段中填充下一个值之前中断50毫秒:膨胀,我如何解决这个问题?对不起,我对javascriptI很陌生我正在尝试修复…)嗯,在某个地方出错了。只有函数,然后调用?你必须把函数放在循环之外。把它放在
Betrag=new Array()之前
例如。好吧,ure代码对我有效,但现在所有的值都在一起..希望它像在第一个输入中填充值一样,然后在下一个输入字段中填充下一个值之前中断50毫秒:如果您将k设置为0,那么在原始问题中会发生什么情况?您将k设置为0,这在哪里发生呃原来的问题是怎么回事??