javascript中DOM的操作(2)

事件操作

事件注册操作

事件注册操作中,有两种常用的方法,一种是传统的方式,另一种是比较常用的方式,在这里一一列出,这里需要自己运行点击才能看到结果


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件注册操作</title>
</head>
<body>
<button>传统注册事件</button>
<button>方法监听注册事件</button>
<script>
    //在下面的测试中,屏幕只会弹出一个world框框,该传统方式会把第一个框框覆盖掉
    var btns = document.querySelectorAll('button');
    btns[0].onclick = function () {
        alert('hello');
    }
    btns[0].onclick = function () {
        alert('world');
    }
 
    //这个是用事件监听注册事件,解决了传统的覆盖问题,比较常用
    btns[1].addEventListener('click',function () {
        alert('欢迎');
    });
    btns[1].addEventListener('click',function () {
        alert('光临');
    });
</script>
</body>
</html>

删除事件

有些事件你只想执行有限次,所以你需要用到删除事件,就像注册账号时,发送过一个验证码之后,需要等一定的事件才能再次发送一样,这里也是展示两种方式的删除


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>删除事件</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: green;
        }
    </style>
</head>
<body>
<div>1</div>
<div>2</div>
<div>3</div>
<script>
    var divs = document.querySelectorAll('div');
 
    //传统方式删除事件
    divs[0].onclick = function () {
        alert('1');
        divs[0].onclick = null;
    }
 
    divs[1].addEventListener('click',fn);
    function fn() {
        alert('2');
        divs[1].removeEventListener('click',fn);
    }
</script>
</body>
</html>

DOM事件流

关于这个DOM事件流的描述,我都写到了注释里了,简单来说就是事件执行是有一定顺序的,可以理解为从父到子,从子到父


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM事件流</title>
    <style>
        .father {
            width: 200px;
            height: 200px;;
            background-color: green;
        }
        .son {
            width: 100px;
            height: 100px;
            background-color: blue;
        }
    </style>
</head>
<body>
<!--DOM事件流分为三个阶段,一个是捕获阶段,一个是目标阶段,最后一个是冒泡阶段
如果我们给div注册了点击事件,那么首先是document接收到点击事件,没有执行程序,然后html接收到点击事件
没有执行程序,然后再是body接受到点击事件,也没有执行程序,这是捕获阶段。然后找到div,有执行程序,
找到div就是目标阶段了。 然后再回到body,收到点击事件,没有执行程序,再到html,也没有执行程序,最后到
document,也没有执行程序,这就是冒泡阶段-->
<div class="father">
    <div class="son">son</div>
</div>
 
<script>
 
    //捕获阶段,addEventListener 第三个参数为true
    // document->html->body->father->son
    var son = document.querySelector('.son');
    /*son.addEventListener('click',function () {
        alert('son');
    },true);
    var father = document.querySelector('.father');
    father.addEventListener('click',function () {
        alert('father');
    },true);*/
 
    //冒泡阶段, addEventListener 第三个参数为false,或者是省略
    // son->father->body->html->document
    son.addEventListener('click',function () {
        alert('son');
    },false);
 
    var father = document.querySelector('.father');
    father.addEventListener('click',function () {
        alert('father');
    },false);
 
</script>
</body>
</html>

事件对象

事件对象,也就相当于一个形参,是系统自动设置的,里面有很多的参数,这里截图展示下

 

上面有一个是target,返回的是div,在这里很容易与this产生混淆,这里举例单独说下


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>常见事件</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: green;
        }
    </style>
</head>
<body>
<div>123</div>
<ul>
    <li>abc</li>
    <li>abc</li>
    <li>abc</li>
</ul>
<script>
    var div = document.querySelector('div');
    div.addEventListener('click',function (e) {
        console.log(e.target);//返回的是触发事件的对象
        console.log(this);//返回的是绑定事件的对象
    })
    var ul = document.querySelector('ul');
    ul.addEventListener('click',function (e) {
        console.log(e.target);//这里指向我们点击的对象,点击li返回就是li
        console.log(this);//这里指向的绑定事件,也就是ul
    })
</script>
</body>
</html>

当点击ul中的li的时候, 返回的结果是不一样的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值