Blogger Information
Blog 8
fans 0
comment 0
visits 8396
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
事件监听、冒泡、捕获、代理、委托
努力努力再努力
Original
727 people have browsed it

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>
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post