博客列表 >事件监听、冒泡、捕获、代理、委托

事件监听、冒泡、捕获、代理、委托

努力努力再努力
努力努力再努力原创
2020年06月27日 23:33:12724浏览

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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议