• JavaScript学习笔记(五)—— 事件类型 ( 标准/IE、顺序、取消冒泡、阻止默认事件、事件对象、事件委托)


    1、标准事件流
      EMCAScript标准规定事件流包含三个阶段:
         事件捕获阶段、处于目标阶段、事件冒泡阶段
            
    W3C下的事件绑定
    添加事件 — addEventListener()
    移除事件 — removeEventListener()
    停止事件冒泡 — even.stopPropagation( )
    其中包含3个参数:事件名(如click、mouseover-不加on)、函数、冒泡或捕获的布尔值(捕获为true,冒泡为false。一般情况下我们都使用false)
    例如:
    ★总结:
       ①addEventListener( )可以为元素分配多个处理函数,而不是覆盖;  
    【如:window.addEventListener(“load”),function(){alert(“Hi”);},false);
               window.addEventListener(“load”),function(){alert(“Goodbye”);},false);
               //会相继弹出 Hi GoodBye.而不会被覆盖】
        ② 相同函数会被屏蔽.
    【如:window.addEventListener(“load”,init,false);
               window.addEventListener(“load”,init,false);
               function init(){
               alert(“Hi”);}   //只会弹出一次 Hi】
        ③ 可以传递this
        ④ 添加一个额外方法,不会被覆盖

    2、IE事件流
    两个阶段:处于目标阶段、冒泡阶段
    IE下的事件绑定
    添加事件 — attachEvent( )
    移除事件 — detachEvent( )
    停止事件冒泡 — window.event.cancelBubble = true;
    由于IE不支持捕获,则只需2个参数:事件名(要加on)、函数名    
    例如:
    ★总结:
    ① IE下事件绑定可以解决覆盖问题,顺序会颠倒,如上例
    ② 相同函数不会被屏蔽,如上例
    ③ 无法传递this。
    【例:window.attachEvent(“unload”,function( ){
               var box = document.getElementById(“box”);
                box.attachEvent(“onclick”,function(){
                alert(this ===window);   //得到true,不能传递this
               }});】
    ④ 添加额外方法,不会被覆盖
    【例:window.attachEvent(“onload”,function(){
               var box = document.getElementById(“box”);
               box.attachEvent(“onclick”,function(){
               alert(“Hi”);
             });
              box.attachEvent(“onclick”,function( ){
              alert(“Hello”);
             }); 
           });//依次弹出 Hi , Hello】

    3、事件的执行顺序
    事件的捕获阶段→处于目标阶段→事件冒泡阶段→事件默认行为
    (默认行为是最后执行的,所以我们有机会阻止默认行为)
    4、停止事件冒泡
    a、 IE下,window.event.cancelBubble = true
    b、 DOM标准下,event.stopPropagation( );
    c、 跨浏览器处理方法:
         function someHandle (event) {
            event = event || window.event;
            if(event.stopPropagation) {
               event.stopPropagation( );
      } else {
              event.cancelBubble = true;
       }
    }
    5、阻止事件默认行为
    a、IE下,event.returnValue = false;
    b、DOM标准下,event.preventDefault( );
    c、跨浏览器兼容:
       function someHandle(event) {
      event = event || window.event;
        if(event.stopPropagation){
        event.stopPropagation();
      } else{
        event.cancelBubble = true;
      }
    }
    6、事件对象
      触发DOM上某个事件时,会产生一个事件对象event。
    1、标准浏览器下:
    2、IE下:
    IE中 srcElement 对应 target
    event.returnValue = false 对应 event.preventDefault( );
    event.cancelBubble = true 对应 event。stopPropagation( );
    relatedTarget 对应 fromElement 和 toElement 属性

    7、JS与Jquery的事件委托
    概念:事件本身是加在某些元素上,利用冒泡原理,事件加到父级上,触发执行效果
    使用情景:为dom 中很多元素绑定相同事件
                      为dom中尚不存在的元素绑定事件
    js实例:
      html部分:
       <ul id = “parent">
        <li id =“post1” ></li>
        <li id = “post2”></li>
        <li id = “post3”></li>
    </ul>
    js部分:
    document.getElementById(‘parent’).addEventListener(‘click’,function(e){
       if (e.target && e.target.nodeName == “li”){
           console.log( );  //找到目标输出。。。
       }
       })
    jQuery实例:
      jQuery中事件委托的方法:on( ),bind( ),live( ),delegate( )
             bind( ),live( ),delegate( )方法的优缺点:http://www.mzwu.com/article.asp?id=3490 
     绑定事件 on( ) 对应 移除事件绑定 off ( )
         $(‘button’).on (“click”,function( ){ })
         $(document).on(“click”,”button”,function( ){ })  ━ selector可选参数,用于指定哪些后代元素可以触发绑定的事件。
     事件效果 
    1、点击事件、弹出登陆框
    逻辑原理:①设置第一个div,在页面固定定位并居中,将css的display属性设为none,z-index属性尽可能大;
                  ②设置第二个div, 其css的z-index属性值小于第一个div ,大于其他div,设置透明度opacity,display属性同样为none;
                  ③点击某个元素时,例点击 “登陆”按钮,js获取元素节点后将display属性设为“block”
     
                      ④点击关闭或取消按钮时,display属性设为none;
    例  html代码:
     
     
    js 代码:
     
    效果:
  • 相关阅读:
    new对象数组时的内存布局
    写程序取自己进程的AEP
    类虚函数表原理实现分析(当我们将虚表地址[n]中的函数替换,那么虚函数的实现就由我们来控制了)
    测试 __try, __finally, __except(被__finally捕获的异常, 还会被上一级的__except捕获。反之不行)
    围观M$的new
    将258.369 double值转为内存表示(科学计数法)
    Broadcast Reveiver作用
    DEBUG模式下, 内存中的变量地址分析
    不包含SDK头文件, 补全API定义
    俄罗斯方块SDK版
  • 原文地址:https://www.cnblogs.com/emory/p/5252542.html
Copyright © 2020-2023  润新知