JS中的事件流

本文介绍了JavaScript中的事件流,包括事件捕获和冒泡阶段,并详细阐述了DOM0级、DOM2级事件处理程序的区别和使用方法。此外,还探讨了事件委托作为优化大量DOM元素事件处理程序的策略,以提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

事件流描述的是从页面中接受事件的顺序,在JS中分为两种,一个是事件冒泡,还有一个是事件捕获

在这里插入图片描述

当btn中的事件被触发了,其事件流的顺序就如上图所示, 先从最外面的body开始到btn的捕获阶段,再是从里到外的事件冒泡阶段。

DOM 事件流

在"DOM2级事件"规定的事件流包括三个阶段“事件捕获阶段、出于目标阶段和事件冒泡阶段”。一般来说,出于目标阶段会被看成冒泡阶段的一部分

事件处理程序

1.HTML事件处理程序

直接在html中添加事件处理程序,如

<input type="button" onclick="alert('click')" value="click Me">

可以直接在标签为onclick属性添加对应为事件处理函数。html添加事件的缺点由两个:

  • 存在“时差”,html元素显示在页面上时,其事件处理程序可能还未准备好,这时候触发事件,则会发生错误。
  • 耦合性的问题,html和js代码的耦合度过高。

2.DOM0级事件处理程序

dom0级事件处理程序,就是讲一个函数赋值给一个事件处理程序属性,如:

var btn = document.getElementById('btn');
    btn.onclick = function(){
        console.log('click');
    }

如果要删除事件处理程序可以,通过将事件处理程序属性赋值null来实现。

3.DOM2级事件处理程序

dom2级事件处理程序,是指添加和删除事件处理程序的操作:addEventListener()removeEventListener() .
添加

const show = function () {
        console.log(this.id);
    }
    var btn = document.querySelector('input');
    btn.addEventListener('click', show);

移除

btn.removeEventListener('click', show);

事件委托

当需要为大量的dom元素添加事件处理程序时,如果直接为每一个元素添加对应的事件处理程序,这是十分消耗资源,影响性能的。事件委托就是处理“事件处理程序过多”问题的一种解决方案。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <ul id='mylist'>
        <ul id='ul1'>ul1</ul>
        <ul id='ul2'>ul2</ul>
        <ul id='ul3'>ul3</ul>
        <ul id='ul4'>ul4</ul>
    </ul>
    </div>
</body>
<script>
    function fun1(ev){
        console.log(ev.target.id);
    }
    var mylist = document.getElementById('mylist');
    mylist.addEventListener('click', fun1,false);

</script>

</html>

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值