在Javascript中,你经常需要听列表中的李的一些例子。假设我们有一个列表如下:

复制代码代码如下所示:



第一条

2

Item3

第四





如果我们想实现以下功能:当鼠标点击一个李时,警报输出的内容,我们通常写这个:

当列表中的项目都比较小,onclick事件直接添加到每一个李

当清单项目较多,每个列表项调用onload

第一种方法简单而直接,但它没有考虑HTML和Javascript之间的分离,也不推荐使用。第二种方法的代码如下所示:

复制代码代码如下所示:

窗口。指针函数(){

无功ulnode = document.getelementbyid(一览表);

无功linodes = ulnode。子| | ulnode.children;

对于(var i = 0;i < linodes.length;i++){

我linodes { }。addEventListener(听到咔哒声,功能(e){

警报(e.target .innerHTML);

},假);

}

}



由此可以看出,如果连续删除或添加李,函数()也必须不断地改变操作,从而容易出错。因此,建议使用事件代理。在使用事件代理之前,让我们首先了解事件阶段。

事件阶段:

当一个事件被触发时,他不仅是一次对其起源引发的,但通过三个不同的阶段。简而言之:事件从文档的根节点到目标对象开始(捕获阶段),然后触发对目标(目标阶段),然后返回到根节点(泡沫阶段)的文档,如图所示(图片来自W3C)。



事件捕获阶段(捕获阶段)

在活动的第一阶段是捕获阶段。事件从文档流的根节点的DOM树结构的事件目标节点的开始。每个层面的DOM节点传递的方式,和捕获事件引发的对每个节点到目标节点的到达到达的时间,捕获阶段的主要任务是恢复的传播路径,这是追溯到文danggen节点的路径在冒泡阶段。

复制代码代码如下所示:

element.removeeventlistener(ltevent名称>,);



我们监测的节点通过使用该功能,你可以添加一个监视回调函数设置了真实的事件捕获阶段。在实际应用中,我们不使用许多用例捕获阶段的监测,但是我们可以防止类似的点击事件触发一个特定的元素,通过捕获捕获阶段的事件。

复制代码代码如下所示:

VaR形式= document.queryseletor(‘形');

form.addeventlistener(听到咔哒声,功能(e){

e.stoppropagation();

},真的);



如果您对这个用法不太了解,最好在气泡阶段设置false或未定义值来监视事件。

目标相位(目标相位)

当事件到达目标节点时,事件进入目标阶段。事件在目标节点上触发,然后反向回流以了解最外层的文档节点。

多层嵌套节点,鼠标指针通常是位于该元件的最内层。假设你设置一个点击监控功能在一个DIV元素,而P元素内的元素的用户点击,然后P元素是本次事件冒泡允许目标元素。我们监视点击事件这个div或更高级别的元素,并触发回调函数的时间传播过程。

冒泡相(气泡相)

当一个事件触发在一个目标事件上时,它不会终止在这个元素上,它会向上或向下冒泡DOM树,直到它到达最外层的根节点,也就是说,相同的事件将在目标节点的父节点,父节点的父节点上触发…直到最最外面的节点。

大多数事件都是冒泡的,但不是全部。具体可见:规范

可以想象,事件代理可以用来监视每一个代码,代码如下所示:

复制代码代码如下所示:

窗口。指针函数(){

无功ulnode = document.getelementbyid(一览表);

UlNode.addEventListener(听到咔哒声,功能(e){

如果(e.targete。目标。它们。toUpperCase)=(礼)确定李* / / * {目标事件

警报(e.target .innerHTML);

}

},假);

};



以上是本文的全部内容,希望能够熟悉Javascript事件的委托和代理可以帮助。

请花些时间与朋友分享这篇文章,或者留下评论,我们要感谢你的支持!