zoukankan      html  css  js  c++  java
  • js学习笔记26----事件冒泡,事件捕获

    事件冒泡 : 当一个元素接收到事件的时候,会把它接收到的所有传播给它的父级。一直到顶层window。这种现象称之为事件冒泡机制。出去的事件触发。
    阻止冒泡 : 当前要阻止冒泡的事件函数中,调用 event.cancelBubble = true;
    事件捕获 : ie下是没有的,在绑定事件中,标准下是有的。进来的事件触发。
     
    给对象绑定函数的形式
    1.给一个对象绑定一个事件处理函数:
    obj.onclick = fn;
     

    2.给一个对象的同一个事件绑定多个不同的函数:

    ie : obj.attachEvent(事件名称,事件函数)
    1.没有捕获
    2.事件名称有on
    3.事件函数执行的顺序 :标准ie --> 正序,非标准ie ---> 倒序
    4.this 指向 window
     
    标准 : obj.addEventListener(事件名称,事件函数,是否捕获)
    1.有捕获
    2.事件名称没有on
    3.事件函数执行的顺序 :正序
    4.this 指向触发该事件的对象
     
    取消事件绑定:
    第一种事件绑定形式的取消:
    obj.onclick = null;

    第二种:
    ie : obj.detachEvent(事件名称,事件函数)
    标准 : obj.removeEventListener(事件名称,事件函数,是否捕获)
     
    是否捕获:默认是false     false : 冒泡     true : 捕获
     
    call 函数下的一个方法,call方法的第一个参数可以改变函数执行过程中的内部this的指向
    call 方法的第二个参数开始就是原来函数的参数列表。
     
     
     
     
    事件捕获示例代码:
     1 <!DOCTYPE html>
     2 <html lang="en">
     3     <head>
     4         <title>事件捕获</title>
     5         <meta charset="UTF-8">
     6         <meta name="viewport" content="width=device-width, initial-scale=1">
     7         <script>
     8             window.onload = function(){
     9                 function fn1(){
    10                     alert(this);
    11                     alert(1);
    12                 }
    13                 function fn2(){
    14                     alert(this);
    15                     alert(2);
    16                 }
    17                 /*
    18                 document.onclick = fn1;
    19                 document.onclick = fn2; //后面的覆盖前面的
    20                 */
    21 
    22                 //ie写法
    23                 //document.attachEvent('onclick',fn1);
    24                 //document.attachEvent('onclick',fn2);
    25 
    26                 //标准写法
    27                 //document.addEventListener('click',fn1,false);
    28                 //document.addEventListener('click',fn2,false);
    29                 
    30                 //兼容写法
    31                 function bind(obj, evname, fn){
    32                     if(obj.addEventListener){
    33                         obj.addEventListener(evname, fn, false);
    34                     }else{
    35                         obj.attachEvent('on' + evname, function(){
    36                             fn.call(obj);
    37                         });
    38                     }
    39                 }
    40                 bind(document,'click',fn1);
    41                 bind(document,'click',fn2);
    42             }
    43             
    44         </script>
    45     </head>
    46     <body>
    47         <div>
    48             
    49         </div>
    50     </body>
    51 </html>

    call示例代码:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3     <head>
     4         <title>call</title>
     5         <meta charset="UTF-8">
     6         <meta name="viewport" content="width=device-width, initial-scale=1">
     7         <script>
     8             window.onload = function(){
     9                 function fn1(){
    10                     alert(this);
    11                 }
    12 
    13                 function fn2(a,b){
    14                     alert(this);
    15                     alert(a+b);
    16                 }
    17 
    18                 //fn1();   //window
    19                 //fn1.call();  //弹出window,此时就等同于fn1()
    20                 //fn1.call(1); //弹出1,call的第一个参数为this的指向
    21                 //fn2.call(1,4,10); //依次弹出1,14,如果函数有参数时,则第一个为this的指向,后面为函数带的参数
    22                 fn2.call(null,4,10); //依次弹出window,14,第一个参数为null表示不改变this指向。
    23             }
    24             
    25             
    26         </script>
    27     </head>
    28     <body>
    29         <div>
    30             
    31         </div>
    32     </body>
    33 </html>
  • 相关阅读:
    win7下virtualbox遇到的问题
    2.5年, 从0到阿里
    TCP/IP入门(4) --应用层
    TCP/IP入门(3) --传输层
    TCP/IP入门(2) --网络层
    TCP/IP入门(1) --链路层
    Socket编程实践(13) --UNIX域协议
    Socket编程实践(12) --UDP编程基础
    Socket编程实践(10) --select的限制与poll的使用
    Socket编程实践(9) --套接字IO超时设置方法
  • 原文地址:https://www.cnblogs.com/sese/p/7266010.html
Copyright © 2011-2022 走看看