相关疑难解决方法(0)

for循环中的setTimeout不会打印连续值

我有这个脚本:

for (var i = 1; i <= 2; i++) {
    setTimeout(function() { alert(i) }, 100);
}
Run Code Online (Sandbox Code Playgroud)

但是3两次都被提醒,而不是1那时2.

有没有办法传递i,而不是将函数写为字符串?

javascript

254
推荐指数
7
解决办法
19万
查看次数

将函数传递给循环中的setTimeout:总是最后一个值?

我正在尝试使用setTimeout来执行我传递信息的匿名函数,我遇到了麻烦.这个(硬编码版本)可以正常工作:

setTimeout(function(){alert("hello");},1000);
setTimeout(function(){alert("world");},2000);
Run Code Online (Sandbox Code Playgroud)

但是我试图从数组中取出hello和world并将它们传递给函数,而不是(a)使用全局变量,以及(2)使用eval.我知道如何使用全局或eval来做到这一点,但是如何在没有它的情况下做到这一点.这是我想做的(但我知道它不会起作用):

var strings = [ "hello", "world" ];
var delay = 1000;
for(var i=0;i<strings.length;i++) {
    setTimeout( function(){alert(strings[i]);}, delay);
    delay += 1000;
}
Run Code Online (Sandbox Code Playgroud)

当然,字符串[i]将脱离上下文.如何在没有eval或globals的情况下将字符串[i]传递给该匿名函数?

javascript settimeout

17
推荐指数
3
解决办法
1万
查看次数

在循环中调用setTimeout函数

我是javascript的新手,我试图在for循环中使用setTimeout调用函数.循环为nodeList的每个成员执行.

我发现我用setTimeout调用的函数实际上只是在循环的最后一次迭代中执行.在下面的例子中,我想对setTimeout进行三次单独的调用,但我发现前两个调用被忽略了.

function moveants(e, stepdistance) {

    . . . . .

    for(var i = 0; i < 3; i++)
    {
        var nextAnt = antgroup.childNodes[i]
        nextAnt.count = 0;
        nextAnt.member = i;
        setTimeout(function () { takeStep(nextAnt, mouseclickX, mouseclickY, 10) }, 0);
    }
}

function takeStep(ant, destX, destY, stepDistance) {

    . . . .

    . . . .

    if( condition )
    {
        return;
    }
    else
    {
        takeStep(ant, destX, destY, stepDistance);
    }
}
Run Code Online (Sandbox Code Playgroud)

我看过其他帖子描述了多次调用setTimeout.令人惊讶的是(对我来说),如果我简单地将它们从这样的for循环中取出,那么多个调用将会起作用.

    setTimeout(function () { takeStep(antgroup.childNodes[0], …
Run Code Online (Sandbox Code Playgroud)

javascript for-loop settimeout

3
推荐指数
1
解决办法
3612
查看次数

在for循环中将参数传递给setTimeout

我正在尝试学习如何在javacript for循环中将参数传递给setTimeout.这是示例代码.正如它目前所写的那样,setTimeout每次传递的精确度都相同,而不是反映实际在数组中的不同i.

var a=100;
for (i in array)
{   
    setTimeout("do_stuff(i, a)"), 2000);    
}
Run Code Online (Sandbox Code Playgroud)

(我在这里看到了一些类似的问题和答案,但代码示例要复杂得多.回答这个最基本的例子可以帮助其他人解决同样的问题.谢谢!)

javascript arguments loops for-loop settimeout

2
推荐指数
1
解决办法
2220
查看次数

Javascript:如何将不同的对象传递给循环中创建的setTimeout处理程序?

我正在尝试编写一些JS复制jQuery的fadeIn和fadeOut函数.这是我到目前为止的代码:

function fadeIn(elem, d, callback)
{

    var duration = d || 1000;
    var steps = Math.floor(duration / 50);
    setOpacity(elem,0);
    elem.style.display = '';
    for (var i = 1; i <= steps; i++)
    {
        console.log(i/steps + ', ' + (i/steps) * duration);
        setTimeout('setOpacity("elem", '+(i / steps)+' )', (i/steps) * duration);
    }
    if (callback)
        setTimeout(callback,d);
}
function setOpacity(elem, level)
{
    console.log(elem);
    return;
    elem.style.opacity = level;
    elem.style.MozOpacity = level;
    elem.style.KhtmlOpacity = level;
    elem.style.filter = "alpha(opacity=" + (level * 100) + ");";
}
Run Code Online (Sandbox Code Playgroud)

我遇到第一个setTimeout调用的麻烦 - …

javascript object settimeout

1
推荐指数
1
解决办法
4196
查看次数

标签 统计

javascript ×5

settimeout ×4

for-loop ×2

arguments ×1

loops ×1

object ×1