DOM注册事件以及删除事件

936 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第32天,点击查看活动详情

注册事件以及删除事件

注册事件(绑定事件)

注册事件也就是给元素添加事件,成为注册事件或者绑定事件。

注册事件的方法有两种:

  1. 传统方法注册事件
  2. 方法监听注册事件

那么这两种方法有什么区别呢?

传统方法注册事件

传统方法注册事件,就是直接在元素上添加事件属性,然后给事件属性赋值,这个值就是事件处理函数。

我们事件经常利用on开头,比如onclickonmouseoveronmouseout等等。

这种方法注册事件有一个特性:唯一性

也就是说,如果一个元素上有多个事件,那么这个元素上只能有一个事件处理函数。如果有多个事件注册,那么最后一个注册事件会覆盖前面的事件。

方法监听注册事件

这是w3c的标准,也是我们推荐使用的方法。

方法监听注册事件,就是利用addEventListener方法来注册事件。

Element[i].addEventListener(event, function, useCapture);

这个方法有三个参数:

  1. event:事件类型,比如clickmouseovermouseout等等。
  2. function:事件处理函数。
  3. useCapture:是否在捕获阶段执行事件处理函数。默认值为false,表示在冒泡阶段执行事件处理函数。

注意:

ie8及以下版本不支持这个方法。 看来好东西都是有兼容性的问题。

这个方法的特点呢,就是不会出现唯一性问题,也就是说,如果一个元素上有多个事件,那么这个元素上可以有多个事件处理函数。它会按照我们注册事件的顺序依次执行。

删除事件(解绑事件)

在实际开发中,我们可能会遇到这样一个问题,在用户点击某一个按钮之后,我们希望那个按钮所绑定的事件是一次性的,这个时候就需要在事件处理函数执行完毕之后将这个事件给删除掉。

这个时候就需要用到删除事件的方法了。

方法监听注册方式

1. removeEventListener

eventTarget.removeEventListener(type, listener[, useCapture]);

参数

  • type:事件类型,比如click,mouseover等等
  • listener:事件处理函数
  • userCapture:是否捕获阶段执行

2. detachEvent

eventTarget.detachEvent(type, listener);

参数

  • type:事件类型,比如click,mouseover等等
  • listener:事件处理函数

传统注册方式

eventTarget.onxxx = null

eventTarget.onxxx = null;

参数

  • eventTarget:事件目标
  • onxxx:事件类型,比如onclick,onmouseover等等