(七)事件处理

1.事件捕获与事件冒泡

事件捕获 :事件从顶层元素(document)传播到具体发生事件的元素(Netscape)
事件冒泡 :事件从具体元素传播到顶层元素 (IE)

事件流模型

2.事件处理
  1. HTML 事件处理
<div id="clickItem" onclick="clickMe(this)"></div>
<script>
    function clickMe() {
        alert(arguments[0].id+" clicked!");
    }
</script>
  1. DOM0 事件处理
<div id="clickItem"></div>
<script>
    var clickDiv = document.getElementById("clickItem");
    clickDiv.onclick = function(){
        //事件处理程序中this指向发生事件的对象
        alert(this.id+" clicked!");
    }
</script>
  1. DOM2 事件处理
<div id="clickItem"></div>
<script>
    var clickDiv = document.getElementById("clickItem");
    function handler(){
        alert(this.id+" clicked!");
    }
    function handler2(){
        alert(this.id+" clicked again!");
    }

    //第一个参数:事件类型
    //第二个参数:处理程序
    //第三个参数:true,捕获阶段处理/false,冒泡阶段处理
    clickDiv.addEventListener('click',handler,false);

    //可以添加多个处理程序,按照添加的顺序执行
    clickDiv.addEventListener('click',handler2,false);

    //dom2的事件处理程序只能这样移除
    clickDiv.removeEventListener('click',handler,false)
</script>
  1. IE事件处理
<div id="clickItem"></div>
<script>
    var clickDiv = document.getElementById("clickItem");
    function handler(){
        alert(this.id+" clicked!");
    }
    function handler2(){
        alert(this.id+" clicked again!");
    }
    //第一个参数:事件类型,需要加上"on"前缀
    //第二个参数:处理程序
    clickDiv.attachEvent('onclick',handler);
    //可以添加多个处理程序,与DOM不同,IE按照添加顺序的反序执行,这里先输出again
    clickDiv.attachEvent('onclick',handler2);
    //IE事件处理程序移除
    clickDiv.detachEvent('onclick',handler)
</script>
3.事件对象

1 事件对象:在处理程序(handler)中传入,生命周期为处理期间

event.currentTarget     //处理事件的目标
event.target            //事件的目标DOM
event.type              //事件类型
event.eventPhase        //事件阶段
event.preventDefault()  //取消事件的默认行为
event.stopImmediatePropagation() //立即取消任何捕获或者冒泡行为
event.stopPropagation() //取消冒泡,不再传播事件

2 .IE 事件对象:

event.srcElement     //事件的目标IE
event.cancelBubble() //取消冒泡IE
4.通用的事件监听对象

    var EventUtil = {
        //添加监听
        addHandler:function(ele,handler,type){
            if(ele.addEventListener){
                ele.addEventListener(type,handler,false);
            } else if(ele.attachEvent){
                ele.attachEvent("on"+type,handler);
            } else{
                ele["on"+type] = handler;
            }
        },
        //移除监听
        removeHandler:function(ele,handler,type){
            if(ele.removeEventListener){
                ele.removeEventListener(type,handler,false);
            }else if(ele.detachEvent){
                ele.detachEvent("on"+type,handler);
            }else{
                ele["on"+type] = null;
            }
        },
        //获取事件对象
        getEvent:function(event){
            return event ? event : window.event;
        },
        //获取事件目标
        getTarget:function(event){
            return event.target || event.srcElement;
        },
        //取消默认行为
        preventDefault:function(event){
            if(event.preventDefault){
                event.preventDefault();
            }else{
                event.returnValue = false;
            }
        },
        //阻止冒泡
        stopPropagation:function(event){
            if(event.stopPropagation){
                event.stopPropagation();
            }else{
                event.cancelBubble = true;
            }
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是事件: 我们可以简单的把事件理解为浏览器的感知系统。比如说:他可以感觉到用户是否点击(click)了页面、鼠...
    张松1366阅读 11,763评论 1 6
  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 5,527评论 2 10
  • 事件流: 事件流:页面接收事件的顺序。 IE定义的:事件冒泡流(由最具体的元素依次传播到DOM树的最上层的Docu...
    xiaoguo16阅读 3,698评论 0 0
  • 以下文章为转载,对理解JavaScript中的事件处理机制很有帮助,浅显易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy阅读 8,159评论 1 10
  • 怎样培养习惯? 1、找到驱动力 首先问自己为什么要养成这个好习惯?要写出来原因,而不是走形式。驱动力要大于约束力 ...
    文宫芳儿阅读 1,131评论 1 0