博主信息
博文 8
粉丝 0
评论 0
访问量 12311
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
事件监听、冒泡、捕获、代理、委托
努力努力再努力
原创
970人浏览过

1.事件监听(addEventListener(事件类型,事件方法))

  1. <body>
  2. <!-- 事件属性 -->
  3. <button onclick="console.log(this.innerText)">按钮1</button>
  4. <!--t通过js对象添加事件 -->
  5. <button class="">按钮2</button>
  6. <button class="">按钮3</button>
  7. <script>
  8. // 用对象属性添加事件只有最后一次是有效得,同名事件会发生覆盖
  9. document.querySelectorAll("button")[1].onclick = function () {
  10. console.log("第一次点击");
  11. };
  12. document.querySelectorAll("button")[1].onclick = function () {
  13. console.log("第二次点击");
  14. };
  15. //创建事件监听器 可以给一个元素添加同一个事件,同名事件不会发生覆盖
  16. const btn3 = document.querySelectorAll("button")[2]; //获取元素
  17. // btn3.addEventListener(‘事件类型’,事件方法); 添加事件监听器
  18. btn3.addEventListener("click", function () {
  19. console.log("第一次点击");
  20. });
  21. btn3.addEventListener("click", function () {
  22. console.log("第二次点击");
  23. });
  24. </script>
  25. </body>

2.事件的出发阶段:事件冒泡和事件捕获

addEventListener(事件类型,事件方法,true/false)第三个参数决定事件捕获和冒泡,默认是true则是冒泡,false则是捕获

  1. <body>
  2. <div>
  3. <li><a href="">点击我</a></li>
  4. </div>
  5. <script>
  6. const a = document.querySelector("a");
  7. const li = document.querySelector("li");
  8. const div = document.querySelector("div");
  9. const body = document.body;
  10. //给标签添加点击事件 但是只用点击一次就会出现a li div body 依次出现
  11. // // 事件冒泡 从内向外
  12. a.addEventListener("click", shoWTagName);
  13. li.addEventListener("click", shoWTagName);
  14. div.addEventListener("click", shoWTagName);
  15. body.ddEventListener("click", shoWTagName);
  16. //事件捕获 由外向内 第三个参数默认flase 改成true即可
  17. // 给标签添加点击事件 但是只用点击一次就会出现 body div li a依次出现
  18. a.addEventListener("click", shoWTagName, true);
  19. li.addEventListener("click", shoWTagName, true);
  20. div.addEventListener("click", shoWTagName, true);
  21. body.ddEventListener("click", shoWTagName, true);
  22. function shoWTagName() {
  23. alert(this.tagName);
  24. }
  25. </script>
  26. </body>

3.事件委托和代理

事件代理:就是用父机代理下级元素或者更级元素得同名事件

(1)ev:事件对象

(2)ev.target:返回正在触发的元素即事件触发者

(3)ev.curentTarget 返回代理商即可事件的绑定者

  1. <body>
  2. <ul>
  3. <li>item1</li>
  4. <li>item2</li>
  5. <li>item3</li>
  6. <li>item4</li>
  7. <li>item5</li>
  8. <li>item6</li>
  9. <li>item7</li>
  10. <li>item8</li>
  11. <li>item9</li>
  12. <li>item10</li>
  13. </ul>
  14. <script>
  15. //给li标签添加事件监听 点击哪一个文本就出现对应得文本
  16. const lis = document.querySelectorAll("li");
  17. lis.forEach(function (li) {
  18. li.addEventListener("click", function () {
  19. console.log(li.innerHTML);
  20. });
  21. });
  22. //冒泡可知 ul是所有li标签得父级,所以给li添加事件最终会冒泡给父级
  23. //ev:事件对象, 事件代理就是用父机代理下级元素或者更级元素得同名事件
  24. document.querySelector("ul").addEventListener("click", function (ev) {
  25. // ev.target 返回正在触发的元素即事件触发者
  26. console.log(ev.target);
  27. //ev.curentTarget 返回代理商即可事件的绑定者
  28. console.log(ev.currentTarget);
  29. });
  30. </script>
  31. </body>
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学