Skip to content

事件

事件:是某事发生的信号。

  • 鼠标事件:click、mouse 等
  • 键盘事件:keydown、keyup
  • form 事件:submit、focus
  • Document 事件:DOMContentLoaded
  • CSS 事件:transitionend

handler 的几种形式

处理程序(handler)

  • attribute
  • attribute + function
  • dom property
html
<!-- onclick 的 this 就是 元素本身 -->
<input value="hello" onclick="alert("你好!")" type="button" />
html
<input value="hello" ONCLICK="__h__()" type="button" />

<script>
  function __h__() {
    alert("你好!");
  }
</script>
js
// onclick 是全小写的!
elem.onclick = function () {
  alert("你好");
};

// 移除handler
elem.onclick = null;

警告

js 会覆盖 html 的 onclick

不要使用 setAttribute

js
document.body.setAttribute("onclick", function () {
  alert(1);
});

attribute 总是 string 的,这里的函数会变为字符串!

addEventListener

js
element.addEventListener(event, handler, {
  once: boolean, // true 触发后自动删除监听器
  capture: boolean, // true : 在 事件传播 的 第一阶段 handler,而不是第三阶段(冒泡)
  passive: boolean, // true : 告诉浏览器 handler 不会掉用 event.preventDefault()
});

由于历史原因,以下二者等价

js
element.addEventListener(event, handler, true);
// 二者等同
element.addEventListener(event, handler, { capture: true });

对象形式

js
const obj = {
  // 对象只要有 handleEvent 就可以
  handleEvent(event) {
    console.log(event);
  },
};
element.addEventListener("click", obj);

removeEventListener

js
element.removeEventListener(event, handler[, options]);

handler 一定一定一定是“引用”

特殊的 hanlder

有一些 事件 ,只能通过 addEventListener 设置

如:DOMContentLoaded

event 对象

js
const event = {
  type: String, // 类型,比如 "click"
  currentTarget: DOM, // 与 this 一样,箭头函数需要注意
  clientX: Number,
  clientY: Number,
};