js事件绑定的第二种形式

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件绑定的第二种形式</title>
</head>
<script>
    window.onload = function(){
        /*
        * 什么叫做事件绑定的第二种形式?
        * 给一个对象的统一个事件绑定多个不同的函数,给一个对象绑定事件函数的第二种形式;
        * 为什么要用事件绑定的第二种形式呢?
        * obj.onclick = fn1;
        * obj.onclick = fn2;
        * 同一对象执行不同的事件后者会覆盖前者,但是在事件绑定的第二种形式下就不会出现这个问题
        * ie:obj.attachEvent(事件名称,事件函数);
        *   1.没有捕获
        *   2.事件名称有on
        *   3.事件函数执行的顺序:标准ie下>正序,非标准ie下>倒序
        *   4.this指向window
        *标准:obj.addEventListener(事件名称,事件函数,是否捕获);
        *   1.有捕获
        *   2.事件名称没有on
        *   3.事件执行顺序正序
        *   4.this触发该对事件的对象
        * */
        //ie下用法
        //document.attachEvent('onclick',fn1);
        //document.attachEvent('onclick',fn2);
        //标准下得用法
        //document.addEventListener('click',fn1);
        //document.addEventListener('click',fn2);
        //综合两种方式可以写一个事件绑定函数
        /*function bind(obj,evname,fn){
            if(obj.addEventListener){
                obj.addEventListener(evname,fn,false);
            }else{
                obj.attachEvent('on'+evname,function(){
                    fn.call(obj);//在ie下this指向是window,所以要修正this指向.fn.call();传得第一个参数是this指向的是谁,后面的是所传的参数
                });
            }

        }
        bind(document,'click',fn1);
        bind(document,'click',fn2);*/
        function fn1(){
            alert(1);
        }
        function fn2(){
            alert(2);
        }

        /*
        * obj.addEventListener(evname,fn,false);
        * false:表示冒泡; true:表示捕获
        *
        *
        * */


        //使用事件绑定的第一种形式冒泡执行顺序是div3,div2,div1
        var oDiv1 = document.getElementById('div1');
        var oDiv2 = document.getElementById('div2');
        var oDiv3 = document.getElementById('div3');
        /*oDiv1.onclick = fn;
        oDiv2.onclick = fn;
        oDiv3.onclick = fn;*/


        //下面使用事件绑定的第二种形式
        //false 冒泡 执行顺序div3,div2,div1
        /*oDiv1.addEventListener('click',fn,false);
        oDiv2.addEventListener('click',fn,false);
        oDiv3.addEventListener('click',fn,false);*/
        //true 冒泡 执行顺序div1,div2,div3,主要是捕获按钮接收的事件,捕获到一个执行一个
        /*oDiv1.addEventListener('click',fn,true);
        oDiv2.addEventListener('click',fn,true);
        oDiv3.addEventListener('click',fn,true);
         */


        function fn(){
            alert(this.id);
        }
        //如何移出事件绑定
        //标准下
        /*oDiv1.addEventListener('click',fn,false);
        oDiv2.removeEventListener('click',fn,false);//移出绑定事件
        oDiv3.addEventListener('click',fn,false);*/
        //ie下
        oDiv1.detachEvent('onclick',function(){
            fn.call(oDiv1);
        });//移出绑定事件
        oDiv2.attachEvent('onclick',function(){
            fn.call(oDiv2);
        });
        oDiv3.attachEvent('onclick',function(){
            fn.call(oDiv3);
        });

    }
</script>
<style>
    div { padding:40px; }
    #div1 { background:red; }
    #div2 { background:blue; }
    #div3 { background:green; }
</style>
<body>
<div id="div1">
    <div id="div2">
        <div id="div3"></div>
    </div>
</div>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值