JavaScript---事件详解

事件流

描述的是在页面中接受事物的顺序

接收事物的顺序

  • 事件冒泡

  由最具体的元素接收,然后逐级向上传播至最不具体的元素节点(文档)

  • 事件捕获

  最不具体的节点接收事件,而最集体的节点应该是最后接收事件

事件处理

HTML事件处理

直接添加到HTML结构中

<button id="btn1" onclick="demo()">按钮</button>
<script>
    function demo(){
        alert("Hello");
    }
</script>

 

这种处理方式,存在修改函数名,需要到html中修改事件调用的函数名的问题

DOM0级事件处理

把一个函数赋值给一个事件处理程序属性

解决了HTML事件处理的问题

<button id="btn1">按钮</button>
<script>
    var btn1=document.getElementById(btn1);
    btn1.onclick=function(){
        alert("Hello");
    };//这样写的话,前面的事件会被覆盖
    btn1.onclick=function(){
        alert("Hello2");
    };
    //清除事件
    btn1.onclick=null;
</script>

仍然存在问题,当有多个事件时,前面的事件会被覆盖,只执行最后一个事件处理

DOM2级事件处理

  • addEventListener("事件名", "事件处理函数", "布尔值");

    true:事件捕获

    false:事件冒泡

  • removeEventListener();
<div id="divid">
    <button id="btn1">按钮</button>
</div>
//这样写就不会覆盖前面的事件
<script>
    var btn1 = document.getElementById(btn1)
    btn1.addEventListener("click", function(){
        alert("Hello")
    });
    btn1.addEventListener("click", function(){
        alert("Hello2")
    });
</script>

 

存在IE8及以下版本不支持该事件处理方法

IE事件处理程序

  • attachEvent
  • detachEvent

一个支持各浏览器的的事件处理demo

<button id="btn1">按钮</button>
<script>
    var btn1 = document.getElementById("btn1");
    if (btn1.addEventListener){
        btn1.addEventListener("click", demo);
    } else if (btn1.attachEvent){
        btn1.attachEvent("onclick", demo);
    } else {
        btn1.onclick = demo();
    }
    function demo() {
        alert("Hello");
    }
</script>

 

posted @ 2018-02-04 19:22  小白知浅  阅读(178)  评论(0编辑  收藏  举报