JavaScript事件详解

事件流与事件处理详解
本文详细介绍了事件流的概念,包括事件冒泡与事件捕获的过程,并深入探讨了不同级别的事件处理方式,如HTML事件处理、DOM0级及DOM2级事件处理程序的使用方法。此外,还讲解了如何利用事件对象进行更精细的事件控制。

一、事件流

    1.事件流:描述的是在页面中接受事件的顺序

    2.事件冒泡:由最具体的元素接收,然后逐级向上传播至最不具体的元素的节点(文档)

    3.事件捕获:最不具体的节点先接收事件,而最具体的节点应该最后接收事件


二、事件处理

    1.HTML事件处理:直接添加到HTML结构中

    2.DOM0级事件处理:把一个函数赋值给一个事件处理程序属性

    3.DOM2级事件处理:

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

        true:事件捕获

        false:事件冒泡

        removeEventListener();

    4.IE事件处理程序

        attachEvent

        detachEvent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="div">
            <button id="btn1">按钮</button>
        </div>
        <!--<script>
            function demo(){
                alert("Hello HTML事件处理");
            }
        </script>-->
        <!--<script>
            var btn1 = document.getElementById("btn1");
            btn1.onclick = function(){alert("Hello DOM0级事件处理程序")};//被覆盖掉
            btn1.onclick = function(){alert("Hello DOM0级事件处理程序2")};
            btn1.onclick = function(){alert("Hello DOM0级事件处理程序3")};
        </script>-->
        <!--<script>
            var btn1 = document.getElementById("btn1");
            btn1.addEventListener("click",demo1);
            btn1.addEventListener("click",demo2);
            btn1.addEventListener("click",demo3);
            function demo1(){
                alert("DOM2级事件处理程序1");
            }
            function demo2(){
                alert("DOM2级事件处理程序2");
            }
            function demo3(){
                alert("DOM2级事件处理程序3");
            }
            btn1.removeEventListener("click",demo2)
        </script>-->
        <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>
    </body>
</html>


三、事件对象

     1、事件对象:在触发DOM事件的时候都会产生一个对象

     2、事件对象event:

        type:获取事件类型

        target:获取事件目标

        stopPropagation():阻止事件冒泡

        preventDefault():阻止事件默认行为  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="div">
            <button id="btn1">按钮</button>
            <a href="http://www.baidu.com" id="aid">百度</a>
        </div>
        <script>
            document.getElementById("btn1").addEventListener("click",showType);
            document.getElementById("div").addEventListener("click",showDiv);
            document.getElementById("aid").addEventListener("click",showA);
            function showType(event){
//              alert(event.type);
                alert(event.target);
                event.stopPropagation();//阻止事件冒泡
            }
            function showDiv(){
                alert("div")
            }
            function showA(event){
//              event.stopPropagation();
//              event.preventDefault();
            }
        </script>
    </body>
</html>

本文转自yeleven 51CTO博客,原文链接:http://blog.51cto.com/11317783/1793193
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值