免费获取策划方案多一份参考,总有益处

重庆网站建设

Website construction

案例778

重庆网站建设

回到基本问题:事件委托

来源:xk星空官方网站|时间:2020-11-14|浏览:

Back to basics是一系列的小帖子,我在其中解释了我在项目中一直使用的基本的、无依赖的web技术。这些都不是什么启示,但是这些年来帮助我建立了牢固的,容易维护的项目。

在构建web接口时,我最喜欢的一个技巧是事件委托

事件不仅仅发生在应用它们的元素上。相反,它们沿着DOM树一直到事件,然后再返回。事件生命周期的这些阶段称为事件冒泡和事件捕获。

这样做的实际结果是,您不需要对文档中的每个元素应用事件处理程序。相反,通常父元素上的一个处理程序就足够了。在很久以前,这是非常重要的,因为老的浏览器经常有与事件处理有关的内存泄漏。

假设你有一个链接列表,而不是遵循这些链接,你想做一些代码时,用户点击他们:

这是可行的,但有两个问题:

1. 当列表的内容发生更改时,您需要重新索引该列表(如再次调用assignhandlers())

2. 您只对被单击的链接作出反应,如果您还想在单击列表项时执行某些操作,则需要分配更多的处理程序。

你可以试着在这个例子中点击“切换更多的狗”按钮。它向列表中添加更多项目,当您单击它们时,什么也不会发生。

您可以尝试这里的事件委托示例,代码可以在GitHub (event- delegate .html)上找到。如果你现在点击“切换更多的狗”按钮,并点击任何小狗的链接,你会看到它仍然工作。

您可以做一些事情来确定单击事件发生在哪个元素上。这里最重要的部分是“let t = e.target;”行,它存储了当前由事件捕获/冒泡循环报告的元素。如果我想对一个链接做出反应,我将检查目标上是否存在一个“href”。如果我想对列表项做出反应,我将' nodeName '与' LI '进行比较。注意,如果进行这种检查,节点名总是大写的。

我真的很喜欢事件委托,因为它给了我更多的灵活性,而且我不必担心内容的变化。处理者只是躺在那里等待,直到需要它。

留言

返回顶部

君
重庆网站建设重庆网站建设回到基本问题:事件委托
XML 地图