zoukankan      html  css  js  c++  java
  • 事件委托

    通俗的讲,onclick,onmouseover,onmouseout等这些就是事件

    委托,就是这个事件本来应该加在某些元素上的,而你却加到其他元素上来完成这个事件。

    事件委托原理

    利用事件传播(冒泡)机制,就可以实现事件委托 。具体来说,事件委托就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素(document)来完成

    1.获取当前事件源

      在火狐中获得触发事件的元素(事件源)可以用:

        event.target

      在IE中获得触发事件的元素(事件源)可以用:

        event.srcElement

      // 兼容写法 var Target = event.target||event.srcElement;

    2.事件委托优点

      1,提高性能、效率高

      2,新添加的元素也会有之前的事件

      3,代码量少

    3.获取目标源

      在mouseover事件中,它指向鼠标来自哪个元素

         event.relatedTarget火狐获取触发事件的目标源,与target相反,也是事件委托类型

         fromElement IE获取触发事件的目标源,与srcElement相反,也是事件委托类型

           var from=event.relatedTarget||event.fromElement;

      在mouseout事件中,它指向鼠标去往的那个元素

        event.relatedTarget火狐获取触发事件的目标源,与target相反,也是事件委托类型

        event.toElement IE获取触发事件的目标源,与srcElement相反,也是事件委托类型

           var to=event.relatedTarget||event.toElement;

        parent.onclick=function(ev){
                var e=ev||window.event;
                var target=e.target||e.srcElement;
                console.log(ev);
                if (target.nodeName=='H3') {
                    target.style.background='pink';
                }
                if (target.nodeName=='EM') {
                    target.style.background='blue';
                }
                if (target.nodeName=='SPAN') {
                    target.style.background='orange';
                }
                if (target.id!=parent) {
                    target.style.background='brown';
                }
            }
    box.onclick=function (ev){
                var e=ev||window.event;
                var target=e.target||e.srcElement;
                if (target.nodeName=='LI'&&target.parentNode.id=='list') {
                    target.style.background='pink';
                }
                if (target.nodeName=='LI'&&target.parentNode.id=='list2') {
                    target.style.background='blue';
                }
            }
    var con=document.getElementById('con');
            var btn=document.getElementById('btn');
            var list=document.getElementById('list');
            document.onclick=function(ev){
                var e=ev||window.event;
                var target=e.target||e.srcElement;
                if (target.id=='btn') {
                    list.style.display='block';
                }
                if (target.nodeName=='LI'&&target.parentNode.id=='list') {
                    con.innerHTML=target.innerHTML;
                    list.style.display='none';
                }
                if (target.id!='list'&&target.id!='btn') {
                    list.style.display='none';
                }
            }
  • 相关阅读:
    Lambda表达式 For Android
    RxJava重温基础
    Asp.Net Core 依赖注入默认DI,Autofac注入
    Asp.Net Core2.0 基于QuartzNet任务管理系统
    Asp.Net Core 基于QuartzNet任务管理系统(这是一篇用来水的随笔)
    ADO.NET通用类库
    TripleDES加密解密
    ASP.NET Core的身份认证框架IdentityServer4--(4)添加第三方快捷登录
    ASP.NET Core的身份认证框架IdentityServer4--(3)令牌服务配置访问控制跟UI(可自定义路由)添加
    ASP.NET Core的身份认证框架IdentityServer4--(2)API跟WEB端配置
  • 原文地址:https://www.cnblogs.com/SunShineM/p/6067263.html
Copyright © 2011-2022 走看看