javascript - addEventListener 不通过 getElementsByClassName 处理多元素

标签 javascript

我正在尝试将 addEventListener click 与两个具有相同 class 的按钮一起使用,但它不起作用!

这是 :

<div class="share-block">
  <a href="#" class="btn-rounded share-btn"><i class="fa fa-share-alt fa-2x"></i></a>
  <div class="social-block">
    <a href="http://facebook.com/share" class="btn-rounded btn-sm social-btn btn-fb"><i class="fa fa-facebook"></i></a>
    <a href="http://twitter.com/share" class="btn-rounded btn-sm social-btn btn-tw"><i class="fa fa-twitter"></i></a>
  </div>
</div>

这是 代码:

var socialBtns = document.getElementsByClassName('social-btn');

for (var i = 0; i < socialBtns.length; i++) {
  socialBtns[i].addEventListener('click', function(event) {
    window.open(socialBtns[i].href, "Share", "width=600,height=400");
    event.preventDefault();
  });
}

最佳答案

在您的事件处理程序上使用 this.href 而不是在 for 循环中引用 socialBtns 变量:

var socialBtns = document.getElementsByClassName('social-btn');

for (var i = 0; i < socialBtns.length; i++) {
    socialBtns[i].addEventListener('click', function(event) {
       window.open(this.href, "Share", "width=600,height=400");
       event.preventDefault();
    });
}

您还可以通过在 for 循环之外创建事件处理程序来改进现有代码:

var socialBtns = document.getElementsByClassName('social-btn');

for (var i = 0; i < socialBtns.length; i++) {
  socialBtns[i].addEventListener('click', openSocialLink);
}

function openSocialLink(event) {
  window.open(this.href, "Share", "width=600,height=400");
  event.preventDefault();
}

JSFiddle sample

关于javascript - addEventListener 不通过 getElementsByClassName 处理多元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47335715/

相关文章:

java - 在 Java 类方法中嵌入 JavaScript 片段

javascript - VideoJS - 字幕/字幕轨道在 Chrome 中显示两次?

javascript - 一次设置多个子元素的值?

javascript - Google Closure 是否支持多个 "packages"的 Javascript 文件?

javascript - 纯js中的decodeURIComponent Polyfill

javascript - 为什么 Chrome Canary 不支持我的 Threejs AR [ARCore] Web 应用程序?

javascript - 最大宽度媒体查询: is document.宽度或javascript中的window.width

javascript - 当页面打开时,如何更改网址栏中的整个链接而不仅仅是 URL?

javascript - 多次调用 QUnit 的 assert.async 函数

javascript - 使用 Jquery 触发 asp.net(链接按钮或按钮)单击事件