首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript For-Loop问题

Javascript For-Loop问题
EN

Stack Overflow用户
提问于 2012-11-10 22:39:30
回答 6查看 116关注 0票数 1

我尝试以200毫秒的间隔点击每一项,我写了以下脚本,但For循环似乎有问题。有人能告诉我你认为它有什么问题吗?

代码语言:javascript
复制
function clickLink(elm) {
    var evt = document.createEvent('MouseEvents');
    evt.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    elm.dispatchEvent(evt);
}

function sel() {
    elms = document.getElementsByClassName('uItem');
    var inputs= elms;
    var howbig= elms.length;
    console.log(howbig);

    for (var i=250;i<elms.length;i++)
    {
        setTimeout(clickLink(inputs[i]),200)
    };

页面上有1400个uItem。

EN

回答 6

Stack Overflow用户

发布于 2012-11-10 23:16:57

最干净的解决方案是让你的clickLink函数返回一个函数。

代码语言:javascript
复制
function clickLink(elm) {
    return function() {
        var evt = document.createEvent('MouseEvents');
        evt.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        elm.dispatchEvent(evt);
    };
}

然后交错计时器,如果你想要一个间隔:

代码语言:javascript
复制
var start = 250
for (var i=start;i<elms.length;i++) {
    setTimeout(clickLink(elms[i]), 200 * (i - start))
}

或者丢弃循环,并使用setInterval

代码语言:javascript
复制
var i = 250,
    len = inputs.length;
var itvl = setInterval(function() {
    clickLink(elms[i++]);
    if (i >= len)
        clearInterval(itvl);
}, 200);

并返回到原始的clickLink函数

票数 4
EN

Stack Overflow用户

发布于 2012-11-10 22:58:52

如果您使用的是较新版本的JavaScript,最简单的方法就是使用bind。这将创建一个绑定了参数的函数对象,这些参数是在调用bind时计算的,而不是稍后计算的。您想要的代码行如下:

代码语言:javascript
复制
setTimeout( clickLink.bind( null, inputs[i] ),  /* delay expression here */ )

您可以显式地创建绑定函数,但它很难看,而且只有在强烈要求支持旧的JavaScript解释器的情况下才应该这样做。

票数 2
EN

Stack Overflow用户

发布于 2012-11-10 22:59:57

这里有一个关于ì的范围的问题,需要使用i相应地递增的延迟以具有200毫秒的间隔,以及setTimeout需要一个函数作为参数的事实。

代码语言:javascript
复制
    for (var i=250;i<elms.length;i++)
    {
        setTimeout((function() {
            var j = i // keep i as j in this closure
            return function() { // return the right function
                clickLink(inputs[j])
            }
        })(),200 * i) // set the delay depending on i
    };
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13322979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档