• 事件委托


    通俗的讲,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';
                }
            }
  • 相关阅读:
    错误代码 0x800700b7 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节
    字符型设备驱动程序-first-printf以及点亮LED灯(一)
    翻译 TI SerialBLEbridge V 1.4.1
    lwip TCP client & FreeRTOS 打开TCP 的 保活机制 LWIP_TCP_KEEPALIVE==1
    lwip TCP client 客户端 & FreeRTOS
    CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)
    跟我一起学Linux-线程创建,类似FreeRTOS创建任务
    用 S5PV210 学习 Linux (三) SD卡下载
    用 S5PV210 学习 Linux (二) 刷机(二)
    用 S5PV210 学习 Linux (一) 刷机(一)
  • 原文地址:https://www.cnblogs.com/SunShineM/p/6067263.html
Copyright © 2020-2023  润新知