JavaScript中的事件模型?
事件模型分为三种:
- 原始事件模型(DOM0级)
- 标准事件模型(DOM2级)
- IE事件模型
原始事件模型
- HTML代码中直接绑定
- 通过JS代码绑定
特点:
- 绑定速度快(DOM0级事件具有很好的跨浏览器优势,会以最快的绑定速度,但是由于绑定速度太快,可能页面还未完全加载出来,以至于事件还可能无法正常运行)
- 支支持冒泡,不支持捕获
- 同一类型的事件只能绑定一次(删除DOM0级事件只要将对应事件属性设置为null即可)
标准事件模型
- 事件捕获阶段:事件从document一直向下传播到目标元素。以此检查经过的节点是否绑定了事件监听函数,如果有则执行
- 事件处理阶段:事件到达目标元素,触发目标元素的监听函数
- 事件冒泡阶段:事件从目标元素冒泡到document,依次检查经过的节点是否绑定了监听事件,如果有则执行 事件绑定监听函数的方式如下:
事件移除监听函数的方式如下:
参数如下:
- eventType指定事件类型
- handler是事件处理函数
- useCapture是一个boolean用于指定是否在捕获阶段进行处理,一般设置为false与IE浏览器保持一致
特点:
- 可以在一个DOM元素上绑定多个事件处理器,各自不会冲突
- 执行时机(通过useCapture的true或者false来控制)
IE事件模型
- 事件处理阶段:事件到达目标元素,触发目标元素的监听函数
- 事件冒泡阶段:事件从目标元素冒泡到document,依次检查经过的节点是否绑定了事件监听函数,如果有则执行 事件绑定监听函数的方式如下:
事件移除监听函数的方式如下: