javascript - setTimeout 函数

标签 javascript

我正在尝试创建一个书签来打开包含特定文本的链接,但我遇到了 setTimeout 部分的问题...

javascript:(function(){
    function clickLink(link) {
        if (document.createEvent) {
            var event=document.createEvent("MouseEvents"); 
            event.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
            link.dispatchEvent(event);
        } else if (link.fireEvent) {
            link.fireEvent("onclick");
        }
    } 

    l=document.links;
    for(var i=0;i<l.length;++i) {
        var lL=l[i].innerHTML.toLowerCase(); 
        if(lL.indexOf("click here")!=-1 || lL.indexOf("how")!=-1) 
             setTimeout(function() {clickLink(l[i]) }, 1000);
        }
    }; 
})();

如果我尝试 setTimeout(clickLink(l[i]), 1000);,那么它会起作用,但它会立即运行而不是等待超时!

还想知道一件事,以这种方式单击链接会触发 mousedown/mouseup 事件吗?如果不是,那么我如何以编程方式单击也会触发 mousedown/mouseup 事件的链接?

最佳答案

您遇到了常见的“lambda 中的循环变量”问题:当超时完成时,i 将超出 document.links 的末尾> 和 l[i] 将是未定义。您可以将该部分包装在(另一个)函数中:

(function(item) {
    setTimeout(function() { clickLink(item); }, 1000);
})(l[i]);

关于javascript - setTimeout 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12461261/

相关文章:

javascript - 将内联样式添加到元素后,我如何知道何时可以更改它以使过渡起作用?

javascript - jQuery datetimepicker 在给定开始时设置结束日期

javascript - jQuery 向左滑动和向右滑动

javascript - 使用 Typescript 和 eslint 的私有(private)/公共(public)修饰符

javascript - 获取已定义坐标的图层和要素

javascript - 如何给jsp中的函数提供路径

javascript - 防止模态在选择后将数据保留在缓存中

javascript - 如何使Cordova同步

javascript - 单个函数中 require node.js 模块与全局函数对性能的影响

javascript - 选择上的下拉按钮禁用某些第二个下拉选项