:::info 事件委托是利用事件冒泡原理,管理某一类型的所有事件,利用父元素来代表子元素的某一类型事件的处理方式。 :::
已有元素的事件绑定
场景:假如页面上有一个ul标签,里面包含1000个li子标签,我们需要在单击每个li时,输出li中的文本内容。
绑定方式
- 手动绑定方法- 遍历元素,添加事件。
- 事件委托方法
- 使用事件委托机制,我们可以更加方便快捷地实现新创建元素的事件绑定。由于事件委托机制是利用的事件冒泡机制,即使在元素自身没有绑定事件的情况下,事件仍然会冒泡到父元素中,因此对于新增的元素,只要处理事件流就可以触发其事件。
文档加载完成事件
- 在DOM中,文档加载完成有两个事件,一个是load事件,在原生JavaScript和jQuery中均有实现;另一个是jQuery提供的ready事件。
- ready事件的触发表示文档结构已经加载完成,不包含图片、flash等非文字媒体内容。
- onload事件的触发表示页面中包含的图片、flash等所有元素都加载完成。
load事件
:::info load事件会在页面、脚本或者图片加载完成后触发 ::: 如果load事件用于页面初始化,则有两种实现方式。
第一种方式是在body标签上使用onload属性,类似于onclick属性的设置,其实就是DOM0级事件处理程序。
第二种方式是设置window对象的onload属性,属性值为一个函数。ready事件
:::info ready事件不同于load事件,ready事件只需要等待文档结构加载完成就可以执行。 ::: 拿上面的例子来说,针对一个图片网站,使用ready事件,我们只需要等待HTML中的所有的img标签加载完成就可以执行初始化操作,而不需要等到img标签的src属性完全加载出来。
这样将节省很长的等待时间,对性能来说是一大提升。
因此在很多场景中,我们更推荐在ready事件中做初始化处理。
需要注意的是,ready事件并不是原生JavaScript所具有的,而是在jQuery中实现的,ready事件挂载在document对象上。
加载完成事件的执行顺序
页面加载完成一共有5种处理方式。
- 使用jQuery的$(document).ready(function () {…})。
- 使用jQuery的$(function () {…}),其实是上一种方式的简写。
- 使用jQuery的$(window).load(function(){…})。
- 使用原生JavaScript的window.onload= function(){…}。
- 在body标签上使用onload属性,代码如下所示。
执行顺序结论。
- 使用jQuery的ready事件总会比load事件先执行,jQuery提供的ready事件的两种形式其实是等效的,定义在前面的会先执行。
- load事件的执行顺序取决于方法定义中的位置,当将script标签写在body标签中时,方式4中window.onload会比方式3中jQuery的load()函数先执行。
- 写在body标签中的onload属性优先级会高于window.onload属性。
- 方式4中window.onload与方式3中jQuery的load()函数,是谁先定义则谁先执行。由于load事件执行顺序有很大的不同,因此在使用load事件做页面加载完成处理时需要特别注意。