You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

图片链接的addEventListener失效问题求助

问题:包含子元素的链接点击时无法正确获取href

我用以下代码捕获页面上所有链接的点击事件,把href存入cookie,普通文本链接正常,但点击包含图标(比如<i>标签)的链接时,event.target.href会变成undefined,导致cookie设置失败。

原JavaScript代码

//Get all anchor tags on the page 
var links = document.getElementsByTagName('a'); 
 
//Loop through all the links and attach an event listener to each 
for (var i = 0; i < links.length; i++) { 
    links[i].addEventListener('click', function(event) { 
    
    var date = new Date();
    var expiry='; expires='+date.setTime(date.getTime() + (30 * 1000));
    document.cookie='click_link='+event.target.href+expiry+'; path=/';
    }); 
}

问题示例HTML

<a class="elementor-icon elementor-animation-pulse-shrink" href="https://example.org/path/page/">
  <i aria-hidden="true" class="fas fa-map-marked-alt"></i> Some text
</a>

解决方案

问题核心是event.target的指向:当点击<a>标签内的子元素(比如示例里的<i>图标)时,event.target会指向那个子元素,而子元素本身没有href属性,所以event.target.href自然是undefined。

你需要改用this或者event.currentTarget,这两个属性永远指向绑定事件监听的<a>元素,不管点击的是它的哪个子节点:

修改后的JavaScript代码(方案一:用this.href)

//Get all anchor tags on the page 
var links = document.getElementsByTagName('a'); 
 
//Loop through all the links and attach an event listener to each 
for (var i = 0; i < links.length; i++) { 
    links[i].addEventListener('click', function(event) { 
    
    var date = new Date();
    var expiry='; expires='+date.setTime(date.getTime() + (30 * 1000));
    // 改用this.href获取绑定事件的a标签的href
    document.cookie='click_link='+this.href+expiry+'; path=/';
    }); 
}

修改后的JavaScript代码(方案二:用event.currentTarget.href)

//Get all anchor tags on the page 
var links = document.getElementsByTagName('a'); 
 
//Loop through all the links and attach an event listener to each 
for (var i = 0; i < links.length; i++) { 
    links[i].addEventListener('click', function(event) { 
    
    var date = new Date();
    var expiry='; expires='+date.setTime(date.getTime() + (30 * 1000));
    // 用event.currentTarget.href获取绑定事件的a标签的href
    document.cookie='click_link='+event.currentTarget.href+expiry+'; path=/';
    }); 
}

内容的提问来源于stack exchange,提问作者Frank Petersen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:39:57