addeventlistener - addEventListeners 覆盖其他 EventListeners
问题描述
我正在编写一个脚本,它将创建一个额外的按钮“心脏”来将链接复制到剪贴板。
var AllReferenceNode = document.getElementsByClassName('rowid-link');
for (var i = 0; i < AllReferenceNode.length; i++) {
var XnewNode = document.createElement('a');
XnewNode.innerHTML = "<span class='icon fa fa-heart'></span>";
XnewNode.id = AllReferenceNode[i].getAttribute("href");
XnewNode.className = "QKCopyLink";
XnewNode.href = "javascript:void(0);";
AllReferenceNode[i].after(XnewNode);
}
var Links = document.getElementsByClassName('QKCopyLink');
for (var i = 0; i < Links.length; i++) {
//console.log(i);
var href = document.getElementsByClassName('rowid-link')[i].getAttribute("href");
//console.log(dupa);
//console.log(document.getElementById(dupa));
document.getElementById(href).addEventListener('click', function(){
var dummy = document.createElement('input');
//var copyText = document.getElementsByClassName("rowid-link").getAttribute("href");
document.body.appendChild(dummy);
dummy.value = href;
dummy.select();
document.execCommand('copy');
document.body.removeChild(dummy);
});
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js"></script>
<h6 class="history-title">Sat, 2019-11-16, 03:52
| Notes
|
<span class="username">USER</span>
<a href="#1-2LS7J5O" class="rowid-link">
<span class="icon bookmark fa fa-cloud"></span></a>
<span class="history-reply">
[<a href="#" class="activity-reply">reply</a>]
</span>
</h6>
<h6 class="history-title">Sat, 2019-11-16, 03:52
| Notes
|
<span class="username">USER</span>
<a href="#1-2LS7v5O" class="rowid-link">
<span class="icon bookmark fa fa-cloud"></span></a>
<span class="history-reply">
[<a href="#" class="activity-reply">reply</a>]
</span>
</h6>
<h6 class="history-title">Sat, 2019-11-16, 03:52
| Notes
|
<span class="username">USER</span>
<a href="#1-2LS7JdO" class="rowid-link">
<span class="icon bookmark fa fa-cloud"></span></a>
<span class="history-reply">
[<a href="#" class="activity-reply">reply</a>]
</span>
</h6>
<h6 class="history-title">Sat, 2019-11-16, 03:52
| Notes
|
<span class="username">USER</span>
<a href="#1-2LS7JaO" class="rowid-link">
<span class="icon bookmark fa fa-cloud"></span></a>
<span class="history-reply">
[<a href="#" class="activity-reply">reply</a>]
</span>
</h6>
问题是循环的最后一次运行会覆盖所有事件——所有“心”都复制了最后一个链接。看起来事件被覆盖了,但不确定这怎么可能,因为我指向了应该设置哪个事件侦听器的元素:
document.getElementById(href).addEventListener('click', function(){...
请解释一下为什么会这样。
解决方案
改变:
dummy.value = href;
对此:
dummy.value = this.id;
修复了问题。
推荐阅读
- javascript - NestJS项目转换前端到后端
- python - PySyde2 / fbs 冻结 / 无法执行脚本 main
- r - 当时间序列较短且季度数据出现峰值时可能的预测算法
- python - 基于治疗组显示的表单域
- weblogic - Weblogic 12.2.1 应用服务器 JDK 11 支持
- typo3 - 通过来自 Extbase 的 PHP API 调用验证 FrontendUser
- linux - 简化命令行的linux别名
- python - pygsheets - 使用 dotenv 而不是 json 文件
- python - 如何使用 mysql-connector 检索日期时间值?
- c# - 我收到错误:值不能为空,为什么我的 ICollection 始终为空?