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