细说JS系列(二十三)—事件机制

61 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情

铃铛说点题外话

一句话前情回顾:事件流分了三个阶段(事件捕获阶段、处于目标阶段、事件冒泡阶段)以及如何阻止事件的默认行为

一句话介绍今天:接着说事件机制

铃铛说正文

image.png

今天我们继续说事件机制相关的东西

事件注册

通常我们使用addEventLister注册事件,第一个参数是我们想要绑定的事件,第二个是我们自定义的事件名字,第三个参数是布尔值,7这个参数决定了事件是捕获事件还是冒泡事件,默认情况下这个参数是false,也就是冒泡事件。

事件委托

在JS中我们因为性能优化的原因我们就确定了核心思想就是减少DOM操作

假设我们有一个有100条信息的列表,每个信息上都有一个一样的点击事件,如果我们为每一个li都添加一个事件,不仅很繁琐还会造成DOM访问次数过多而影响性能,这个时候我们就可以使用事件委托来处理

实现事件委托是利用了事件的冒泡原理实现的。当我们为最外层的节点添加点击事件,那么里面的每一条节点信息的点击事件都会冒泡到最外层节点上,委托它代为执行事件。

<ul id="ul">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>
<script>
  window.onload = function(){
    var ulEle = document.getElementById('ul');
    ul.onclick = function(ev){
        //兼容IE
        ev = ev || window.event;
        var target = ev.target || ev.srcElement;
        
        if(target.nodeName.toLowerCase() == 'li'){
            alert( target.innerHTML);
        }
        
    }
  }
</script>

跟铃铛说再见

学习的最后一步:放松

今日冷笑话:一个喝多了的记者去报社,气势汹汹地质问为什么没有刊登他发表的新闻,且纠缠不休。一位善于处理难题的编辑耐心地请他打开当天报纸,然后问:“你看 报纸里还有空白位置发表你的新闻吗?”“没有。”记者回答说。“那就是为什么没有发表的原因。”

放松结束,猜猜明天会说讲些什么吧