js学习总结----事件委托和事件代理

1、什么是事件委托/事件代理

  利用事件的冒泡传播机制(触发当前元素的某一个行为,它父级所有元素的相关行为都会被触发),如果一个容器中有很多元素都要绑定点击事件,我们没有必要一个个的绑定了,只需要给最外层容器绑定一个点击事件即可,在这个方法执行的时候,通过事件源的区分来进行不同的操作。

  具体小案例如下:  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            margin:0;
            padding:0;
            font-size:14px;
        }
        html,body{
            width:100%;
            height:100%;
            overflow:hidden;
        }
        #box{
            position:absolute;
            left:50%;
            top:50px;
            width:100px;
            height:30px;
            margin-left:-50px;
            line-height:30px;
            text-align:center;
            border:1px solid #2489cc;
        }
        #mark{
            position:absolute;
            top:30px;
            left:-1px;
            width:300px;
            height:100px;
            line-height:100px;
            text-align:center;
            background:#ffe470;
            border:1px solid #2489cc;
        }
    </style>
</head>
<body>
    <div id=‘box‘>
        <span>购物车</span>
        <div id="mark" style=‘display:none‘>
            查看购物车的详细信息
        </div>
    </div>

    <script>
        var mark = document.getElementById(‘mark‘);
        document.body.onclick = function(e){
            e = e || window.event;
            e.target = e.target || e.srcElement;

            //如果点击的是box或者是#box下的span,我们判断mark是否显示,显示让其隐藏,反之让其显示
            if(e.target.id==="box" || (e.target.tagName.toLowerCase()==="span" && e.target.parentNode.id===‘box‘)){
                if(mark.style.display === "none"){
                    mark.style.display === "block"
                }else{
                    mark.style.display === "none"
                }
                return;
            }
            //如果事件源是#mark,不进行任何的操作
            if(e.target.id==="mark"){
                return;
            }
            mark.style.display === "none"
        }
    </script>
</body>
</html>
时间: 2024-08-16 04:31:26

js学习总结----事件委托和事件代理的相关文章

js中的事件委托或是事件代理详解

起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.那这是什么意思呢?网上的各位大牛们讲事件委托基本上都用了同一个例子,就是取快递来解释这个现象,我仔细揣摩了一下,这个例子还真是恰当,我就不去想别的例子来解释了

【转】js中的事件委托或是事件代理详解

起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.那这是什么意思呢?网上的各位大牛们讲事件委托基本上都用了同一个例子,就是取快递来解释这个现象,我仔细揣摩了一下,这个例子还真是恰当,我就不去想别的例子来解释了

javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。

首先,弄明白js 当中,什么是事件,事件模型在js中是如何设计的.什么是事件冒泡? 什么是“事件冒泡”呢?假设这里有一杯水,水被用某种神奇的方式分成不同颜色的几层.这时,从最底层冒出了一个气泡,气泡会一层一层地上升,直到最顶层.而你不管在水的哪一层观察都可以看到并捕捉到这个气泡.好了,把“水”改成“DOM”,把“气泡”改成“事件”.这就是“事件冒泡” 什么是事件委托呢?event delegation : 地址:http://davidwalsh.name/event-delegate One

js事件委托(事件代理)

事件委托 js中事件冒泡我们知道,子元素身上的事件会冒泡到父元素身上,事件代理就是本来加载子元素身上的事件,加在其父元素身上,其问起产生了,那么多的子元素怎么区分事件本应该是哪个子元素的. 答案就是event对象记录的事件源,他就是发生事件的子元素: 事件委托的好处? 1.效率高,比如不用for循环 2.js新生成的子元素也不用新其添加事件,程序逻辑比较方便 例子1. 页面有个ul包含着4个li,鼠标移动到li上,li背景变成粉色,移出,背景恢复原色. <!DOCTYPE html> <

js中的事件委托或事件代理

一,概述 JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件. 举一个网上大牛们讲事件委托都会举的例子:就是取快递来解释,有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台MM代为签收.现实当中,我们大都采用委托的方案(公司也不会容忍那么多员工站在门口就为了等快递).前台MM收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,甚至代为付款.这种方案还有一个优势,那就是即使公司里

[读书笔记]C#学习笔记二: 委托和事件的用法及不同.

前言:  C#委托是什么 c#中的委托可以理解为函数的一个包装, 它使得C#中的函数可以作为参数来被传递, 这在作用上相当于C++中的函数指针. C++用函数指针获取函数的入口地址, 然后通过这个指针来实现对函数的操作. 委托的定义和方法的定义类似, 只是在定义的前面多了一个delegate关键字. 正文: 委托可以被视为一个更高级的指针,它不仅仅能把地址传指向另一个函数,而且还能传递参数,返回值等多个信息. 系统还为委托对象自动生成了同步,异步的调用方式,开发人员使用BeginInvoke,E

Javascript中的事件委托(事件代理)

之前我们说过用 for 循环绑定事件 没看过的点这里   今天我们介绍一种更加方便的方法,就是事件委托,也叫事件代理: 件事委托是什么 事件委托:简单说就是把一个事件交给别人来完成,就是利用冒泡原理,将事件绑定到节点的父级节点上,触发执行效果. 件事委托的好处 提高Javascript性能.假如现在有个 ul,里面有10个 li,每个 li 都需要触发事件,之前我们说过可以用 for 循环,遍历所有的 li,然后添加事件,这样会影响Javascript性能. 动态绑定事件,可以给暂未存在的元素绑

事件委托(事件代理)的原理以及优缺点是什么?

事件委托原理:事件冒泡机制: 优点: 1.可以大量节省内存占用,减少事件注册.比如ul上代理所有li的click事件就很不错: 2.可以实现当新增子对象时,无需再对其进行事件绑定,对于动态内容部分尤为适合: 缺点: 事件代理的常用应用应该仅限于上述需求,如果把所有事件都用事件代理,可能会出现事件误判.即本不该被触发的事件被绑定上了事件: 原文地址:https://www.cnblogs.com/rxqlx/p/10338002.html

javascript事件委托,事件代理,元素绑定多个事件之练习篇

<ul id="parent-list"> <li id="post-1">item1</li> <li id="post-2">item2</li> <li id="post-3">item3</li> <li id="post-4">item4</li> <li id="post-