03.事件的委派.html 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script>
  9. window.onload = function(){
  10. //点击按钮以后添加超链接
  11. var btn01 = document.getElementById("btn01");
  12. btn01.onclick = function(){
  13. //创建一个li
  14. var li = document.createElement("li");
  15. li.innerHTML = "<a href='javascript:;' class='link'>新建的超链接</a>";
  16. //将li添加到到ul中
  17. u1.appendChild(li);
  18. };
  19. /**
  20. * 为每一个超链接都绑定一个单击响应函数
  21. * 这里我们为每一个超链接都绑定了一个单击响应函数,这种操作比较麻烦,
  22. * 而且这些操作只能为已有的超链接设置事件,而新添加的超链接必须重新绑定
  23. *
  24. */
  25. //获取所有的a
  26. var allA = document.getElementsByTagName("a");
  27. // for(var i = 0 ; i < allA.length ; i++){
  28. // allA[i].onclick = function(){
  29. // alert("a的单击函数");
  30. // };
  31. // };
  32. /**
  33. * 我们希望,只绑定一次事件,即可应用到多个元素上,即使元素时候添加的
  34. * 我们可以尝试将其绑定给元素的共同的祖先元素
  35. *
  36. * 事件的委派
  37. * -指将事件统一绑定给元素的共同的祖先元素,这样当后代元素上的事件触发时,
  38. * 会一直冒泡到祖先元素,从而通过祖先元素的响应函数来处理事件
  39. * -事件委派是利用了冒泡,通过委派可以减少事件绑定的次数,提高程序的性能
  40. */
  41. //为ul绑定一个单击响应函数
  42. u1.onclick = function(event){
  43. event = event || window.event;
  44. /**
  45. * target
  46. * -event中的target表示的触发事件的对象
  47. */
  48. // alert(event.target);
  49. //如果触发事件的对象是我们期望的元素,则执行,否则不执行
  50. if(event.target.className == "link"){
  51. alert("ul的单击响应函数");
  52. }
  53. };
  54. };
  55. </script>
  56. </head>
  57. <body>
  58. <button id="btn01">添加超链接</button>
  59. <ul id="u1" style="background-color: #bfa;">
  60. <li>
  61. <p>我是p元素</p>
  62. </li>
  63. <li><a href="javascript:;" class="link">超链接一</a></li>
  64. <li><a href="javascript:;" class="link">超链接二</a></li>
  65. <li><a href="javascript:;" class="link">超链接三</a></li>
  66. </ul>
  67. </body>
  68. </html>