事件定义方式与区别

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>document</title>
  6. <style>
  7. .contianer{
  8. width: 600px;
  9. background-color: blueviolet;
  10. }
  11. .box1{
  12. height: 300px;
  13. width: 500px;
  14. background-color: royalblue;
  15. }
  16. .box2{
  17. height: 100px;
  18. width: 300px;
  19. background-color: yellowgreen;
  20. }
  21. </style>
  22. </head>
  23. <body id="body">
  24. <div id="contianer" class="contianer">
  25. <div id="box1" class="box1">
  26. <button onclick="btnClick(this)">html事件</button>
  27. <button id="btn0">DOM0事件</button>
  28. <button id="btn2">DOM2事件</button>
  29. <button id="btn3">双击事件</button>
  30. <a id="a" href="https://baidu.com">a标签</a>
  31. </div>
  32. <div id="box2" class="box2">
  33. <span>box2</span>
  34. </div>
  35. </div>
  36. <script>
  37. // html事件,缺点:js和html不分开,不推荐这种用法
  38. function btnClick(e){
  39. e.innerHTML = "点击了html事件";
  40. console.log("html事件");
  41. var event = window.event || arguments.callee.caller.arguments[0];
  42. event.stopPropagation();
  43. };
  44. // dom0事件,优点:写起来方便,缺点:事件会被覆盖
  45. var btn0 = document.getElementById("btn0");
  46. btn0.onclick=function(e){
  47. e.target.innerHTML = "点击了dom0事件";
  48. console.log("dom0事件");
  49. e.stopPropagation();
  50. };
  51. btn0.onclick=function(e){
  52. e.target.innerHTML = "点击了dom0事件";
  53. console.log("dom0事件被覆盖了");
  54. e.stopPropagation();
  55. };
  56. // dom2事件,优点:事件不是被覆盖,缺点:写起来麻烦
  57. var btn2 = document.getElementById("btn2");
  58. btn2.addEventListener(
  59. 'click',function(e){
  60. e.target.innerHTML = "点击了dom2事件";
  61. console.log("dom2事件1");
  62. e.stopPropagation();
  63. }
  64. );
  65. btn2.addEventListener(
  66. 'click',function(e){
  67. e.target.innerHTML = "点击了dom2事件";
  68. console.log("dom2事件2");
  69. e.stopPropagation();
  70. }
  71. );
  72. //双击事件
  73. var btn3 = document.getElementById("btn3");
  74. btn3.ondblclick = function(e){
  75. e.target.innerHTML = "双击了";
  76. console.log("双击事件");
  77. e.stopPropagation();
  78. };
  79. // 阻止标签默认行为事件
  80. var a = document.getElementById("a");
  81. a.onclick = function(e){
  82. e.target.innerHTML = "点击了a标签";
  83. console.log("a标签事件");
  84. //阻止a标签的默认跳转
  85. e.preventDefault();
  86. e.stopPropagation();
  87. }
  88. // 阻止事件冒泡
  89. var contianer = document.getElementById("contianer");
  90. var box1 = document.getElementById("box1");
  91. var box2 = document.getElementById("box2");
  92. contianer.onclick = function(e){
  93. console.log("点击了contianer");
  94. };
  95. box1.onclick = function(e){
  96. console.log("点击了box1");
  97. //阻止事件冒泡,不阻止的话点击box1默认会同时触发contianer的点击事件
  98. e.stopPropagation();
  99. };
  100. box2.onclick = function(e){
  101. console.log("点击了box2");
  102. e.stopPropagation();
  103. };
  104. </script>
  105. </body>
  106. </html>

事件委托(代理)

由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听数统一处理多个子元素的事件。这种方法也叫事件委托(代理,delegation):

  1. <body id="body">
  2. <ul id="ul">
  3. <li>a</li>
  4. <li>b</li>
  5. <li>c</li>
  6. </ul>
  7. <script>
  8. var ul = document.getElementById("ul");
  9. ul.onclick = function(e){
  10. if(e.target.tagName === "LI"){
  11. console.log(e.target.innerHTML);
  12. }
  13. };
  14. </script>
  15. </body>

1、HTML DOM 事件

DOM: 指明使用的 DOM 属性级别。

2、鼠标事件

属性 描述 DOM
onclick 当用户点击某个对象时调用的事件句柄。 2
oncontextmenu 在用户点击鼠标右键打开上下文菜单时触发
ondblclick 当用户双击某个对象时调用的事件句柄。 2
onmousedown 鼠标按钮被按下。 2
onmouseenter 当鼠标指针移动到元素上时触发。 2
onmouseleave 当鼠标指针移出元素时触发 2
onmousemove 鼠标被移动。 2
onmouseover 鼠标移到某元素之上。 2
onmouseout 鼠标从某元素移开。 2
onmouseup 鼠标按键被松开。 2

3、键盘事件

属性 描述 DOM
onkeydown 某个键盘按键被按下。 2
onkeypress 某个键盘按键被按下并松开。 2
onkeyup 某个键盘按键被松开。 2

4、框架/对象(Frame/Object)事件

属性 描述 DOM
onabort 图像的加载被中断。 ( ) 2
onbeforeunload 该事件在即将离开页面(刷新或关闭)时触发 2
onerror 在加载文档或图像时发生错误。 ( , 和 )
onhashchange 该事件在当前 URL 的锚部分发生修改时触发。
onload 一张页面或一幅图像完成加载。 2
onpageshow 该事件在用户访问页面时触发
onpagehide 该事件在用户离开当前网页跳转到另外一个页面时触发
onresize 窗口或框架被重新调整大小。 2
onscroll 当文档被滚动时发生的事件。 2
onunload 用户退出页面。 ( 和 ) 2

5、表单事件

属性 描述 DOM
onblur 元素失去焦点时触发 2
onchange 该事件在表单元素的内容改变时触发( , ,