JavaScript事件监听器------JavaScript学习之路8

JavaScript的事件监听器

传统事件监听和事件监听器的区别

传统的事件监听器只会覆盖同一个标签的相同事件即:

var bt = document.getElementById("b1");
bt.onclick = function () {
    alert("事件1");
}
bt.onclick = function () {
    alert("事件2");
}

效果:
在这里插入图片描述

但是使用事件监听器后绑定相同的事件互不影响即:

bt.addEventListener("click",function () {
    alert("事件1");
},false);
bt.addEventListener("click",function () {
    alert("事件2");
},false);

在这里插入图片描述

添加事件监听器addEventListener(参数1,参数2,参数3)

  • 参数1:填写事件类型 click、mouseover、mousedown、、、
  • 参数2:填写事件处理匿名函数或者函数名字
  • 参数3:填写false(默认)或者true false是事件冒泡,true是事件捕获

移除事件监听器removeEventListener(参数1,参数2)

  • 参数1:填写事件类型 click、mouseover、mousedown、、、
  • 参数2:填写事件处理函数的名字

兼容性问题

由于IE一下版本不兼容所以做一个封装函数

function addEvent(node,eventType,funNmae,bool=false) {
    if(node.addEventListener){
        node.addEventListener(eventType,funNmae,bool);
    }else{
        node.attachEvent("on"+eventType,funNmae);
    }
}

function removeEvent(node,eventType,funNmae,bool=false) {
    if(node.removeEventListener){
        node.removeEventListener(eventType,funNmae,bool);
    }else{
        node.detachEvent("on"+eventType,funNmae);
    }
}

案例

添加3个按钮,第一个按钮绑定原有的函数,第二个函数绑定一个事件实现对第一个按钮添加第二个函数,第三个按钮用来移除第一个按钮的第二个按钮添加的函数

效果

在这里插入图片描述

完整源码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>事件监听器</title>
    <style>
        html{
            display: flex;
            justify-content: center;
            align-items: center;
        }
        body{
            margin-top: 200px;
        }
    </style>
</head>
<body>
<button id="b1">点击1</button>
<button id="b2">点击2</button>
<button id="b3">点击3</button>
<script>
    var bt1 = document.getElementById("b1");
    var bt2 = document.getElementById("b2");
    var bt3 = document.getElementById("b3");
    bt1.addEventListener("click",function () {//添加原有事件
        alert("点击一原有点击事件");
    },false);

    bt2.addEventListener("click",function () {//添加事件使得点击1添加新事件
        bt1.addEventListener("click",doit,false);
    },false);

    bt3.addEventListener("click",reDoit,false);//添加事件来移除点击1的新事件

    function doit() {
        alert("点击2添加给我的点击事件");
    }

    function reDoit() {
        bt1.removeEventListener("click",doit);
    }
    // bt.onclick = function () {
    //     alert("事件1");
    // }
    // bt.onclick = function () {
    //     alert("事件2");
    // }
    // bt.addEventListener("click",function () {
    //     alert("事件1");
    // },false);
    // bt.addEventListener("click",function () {
    //     alert("事件2");
    // },false);

</script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值