Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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 - Fatal编程技术网

Javascript 使用函数设置超时

Javascript 使用函数设置超时,javascript,Javascript,我正试图创建一个bookmarklet来打开带有特定文本的链接,但我遇到了setTimeout部分的问题 javascript:(function(){ function clickLink(link) { if (document.createEvent) { var event=document.createEvent("MouseEvents"); event.initMouseEvent("click", true

我正试图创建一个bookmarklet来打开带有特定文本的链接,但我遇到了
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);
        }
    }; 
})();
javascript:(函数(){
功能点击链接(链接){
if(document.createEvent){
var event=document.createEvent(“MouseEvents”);
initMouseEvent(“单击”,true,true,window,0,0,0,0,false,false,false,false,false,0,null);
link.dispatchEvent(事件);
}else if(link.firevent){
link.firevent(“onclick”);
}
} 
l=文件链接;

对于(var i=0;i您遇到了常见的“lambda中的循环变量”问题:超时完成时,
i
将超过
文档的结尾。链接和
l[i]
将是
未定义的
。您可以将该部分包装到(其他)函数中:

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

您遇到了常见的“lambda中的循环变量”问题:超时完成时,
i
将超过
文档的结尾。链接
l[i]
未定义
。您可以将该部分包装到(其他)函数中:

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

看起来您正在将所有js放入链接或按钮的
onclick
属性中。如果将其放入函数并调用该函数,则调试可能会更容易。看起来您正在将所有js放入链接或按钮的
onclick
属性中。如果将其放入函数,则调试可能会更容易,然后调用该函数。这就解决了问题。谢谢。顺便说一句,通过这种方式单击链接将触发mouseup/mousedown事件?@Jamesmith:不,不会。这些事件需要单独的事件。你能告诉我怎么做吗?我还需要在单击bookmarklet链接时触发mousedown/mouseup事件?这就解决了问题问题..谢谢。顺便说一句,通过这种方式单击链接将触发mouseup/mousedown事件?@Jamesmith:不,不会。这些事件需要单独的事件。你能告诉我怎么做吗?我还需要在单击bookmarklet链接时触发mousedown/mouseup事件?