跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 可以在 for 循环里,添加 btn.addEventListener(“click”, function(){…} 事件吗?
未分類
28 5 月 2020

可以在 for 循环里,添加 btn.addEventListener(“click”, function(){…} 事件吗?

可以在 for 循环里,添加 btn.addEventListener(“click”, function(){…} 事件吗?

資深大佬 : lisisi 0

可以在 for 循环里,使用 btn.addEventListener(“click”, function(){…} 吗?

<script type="text/javascript">     var btns = document.getElementsByTagName("button");     for (var i = 0; i < btns.length; i++) {         btns[i].addEventListener("click", function(){             // do something;         });     } </script> 

大佬有話說 (16)

  • 資深大佬 : yuanfnadi

    可以,不过事件会冒泡,在父元素捕获的话,只需要一次。

  • 資深大佬 : Mutoo

    另外还要注意 i 的引用问题。建议使用 arrow function,否则 function 引用的是闭包外的 i,当 click 事件触发时 i 永远是 btns.length

  • 資深大佬 : Perry

    建议用 1 的方法在父元素捕获

  • 資深大佬 : Yumwey

    用事件委托

  • 資深大佬 : sybb

    这会都绑定在最后一个 btn 上吧

  • 資深大佬 : TomatoYuyuko

    事件委托就是干这个的,你这么写太笨了

  • 資深大佬 : mengxzhou

    用事件委托绑定在上层节点

  • 資深大佬 : shyangs

    goog
    js 事件代理 事件委托

  • 資深大佬 : Losses

    单层:
    “`
    document.addEventListener(‘click’, (event) => {
    if (event.target.tagName !== ‘BUTTON’) return;
    // do something;
    })
    “`

    如果是多层的话:
    “`
    document.addEventListener(“click”, event => {
    if (!event.target.closest(“button”)) return;
    console.log(“Doing something”);
    });
    “`

    Demo:
    https://codesandbox.io/s/compassionate-williams-09ssq

    只是一个思路,供参考

  • 資深大佬 : luogege

    把 var 换个 let 比较好

  • 資深大佬 : violetlai

    target 来做会好一些

  • 資深大佬 : Doracis

    之前在网上看到冒泡捕获的例子,好像就是你这个问题,我记得是可以把监听绑在父层去调用,具体代码你搜冒泡捕获关键字,在简书还是 cnblog 上就有的

  • 資深大佬 : Doracis

    @Doracis 用原生有点别手,如果有框架的话就方便多了,可以试试呀

  • 資深大佬 : CodingNaux

    《 JavaScript 高级程序设计》或者《 javascript 权威指南》两者选一本看看

  • 資深大佬 : lvming6816077

    如果在回调里获取 i 会始终是一个值,参考 JavaScript 闭包

  • 資深大佬 : minglanyu

    事件委托

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具