动态添加不同点击事件的链接

发布于 2024-10-07 21:24:15 字数 805 浏览 2 评论 0原文

我有一个扩展,它可以动态地在页面上添加多个链接,并且所有链接都应该触发相同的函数,但具有不同的参数值。

我遇到的问题是,单击事件为所有链接发送相同的变量(为每个链接发送最后一个项目的 url)。我相信点击事件每次都会被覆盖。有什么解决办法吗?

for(var i=1;i < splits.length;i++){               //goes through all xml items.
    var link_dom = document.createElement('a');   //creates a link dom.
    var url = parseXMLItem(splits[i],"url");      //fetches url from xml item i.
    var text_dom = document.createTextNode("test"); //creates a text dom.

    link_dom.onclick=function (evt) {             //click event for this specific link.
        chrome.extension.sendRequest({'action' : 'showSite','URL' : url}, mysub);
    }

    link_dom.appendChild(text_dom);               //adds text to link.
    body_dom.appendChild(link_dom);               //adds the link to the website.
}

I have an extension which adds several links on a page dynamically, and all the links should trigger the same function but with diffrent parameter values.

The problem I got is that the click event sends the same variable for all my links (the last item's url gets sent for every link). I belive the click event gets overwritten each time. Is there any solution for this?

for(var i=1;i < splits.length;i++){               //goes through all xml items.
    var link_dom = document.createElement('a');   //creates a link dom.
    var url = parseXMLItem(splits[i],"url");      //fetches url from xml item i.
    var text_dom = document.createTextNode("test"); //creates a text dom.

    link_dom.onclick=function (evt) {             //click event for this specific link.
        chrome.extension.sendRequest({'action' : 'showSite','URL' : url}, mysub);
    }

    link_dom.appendChild(text_dom);               //adds text to link.
    body_dom.appendChild(link_dom);               //adds the link to the website.
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

丘比特射中我 2024-10-14 21:24:16

闭包引用外部上下文中的变量,该变量在每次循环迭代时都会重新分配。尝试这样的事情:

for(var i=1;i < splits.length;i++){               //goes through all xml items.
    var link_dom = document.createElement('a');   //creates a link dom.
    var url = parseXMLItem(splits[i],"url");      //fetches url from xml item i.
    var text_dom = document.createTextNode("test"); //creates a text dom.

    link_dom.onclick=(function(url) {
        return function (evt) {             //click event for this specific link.
            chrome.extension.sendRequest({'action' : 'showSite','URL' : url}, mysub);
        }
    })(url);

    link_dom.appendChild(text_dom);               //adds text to link.
    body_dom.appendChild(link_dom);               //adds the link to the website.
}

The closure is referencing the variable in the outer context, which is reassigned on every loop iteration. Try something like this:

for(var i=1;i < splits.length;i++){               //goes through all xml items.
    var link_dom = document.createElement('a');   //creates a link dom.
    var url = parseXMLItem(splits[i],"url");      //fetches url from xml item i.
    var text_dom = document.createTextNode("test"); //creates a text dom.

    link_dom.onclick=(function(url) {
        return function (evt) {             //click event for this specific link.
            chrome.extension.sendRequest({'action' : 'showSite','URL' : url}, mysub);
        }
    })(url);

    link_dom.appendChild(text_dom);               //adds text to link.
    body_dom.appendChild(link_dom);               //adds the link to the website.
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文