事件绑定函数---bind-原创js库

本文介绍了JavaScript中的事件绑定,包括onclick等常见事件类型。详细阐述了事件绑定的两种方式,一种是仅能绑定一个方法,另一种是支持绑定多个方法,并分析了不同浏览器下事件执行的顺序和this的指向差异。最后提供了兼容性处理的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用小案例

<script>
    function fn1() {
        alert(1);
    }
    function fn2() {
        alert(2);
    }
    function bind(obj, evname, fn) {
        if (obj.addEventListener) {
            obj.addEventListener(evname, fn, false);
        } else {
            obj.attachEvent('on' + evname, function() {
                fn.call(obj);
            });
        }
    }
    bind(document, 'click', fn1);
    bind(document, 'click', fn2);
</script>

点击文档,可以依次弹出 1 2


什么是事件?

onclick,onmouseover、onmouseout、onmousemove等,W3C表格如下:
这里写图片描述

什么是事件绑定?

给一个事件加方法,如:

document.onclick=function(){alert(1)};

事件绑定的方式


第一种

document.onclick=function(){
    alert(1);
}

如果需要绑定多个方法,

document.onclick=function(){
    alert(1);
};
document.onclick=function(){
    alert(2);
}

只弹出2,下面的方法会覆盖上面的方法

这种绑定只适合给事件绑定一个方法


一个事件绑定多个方法

一般浏览器

document.addEventListener('click',function(){alert(1);},false);
document.addEventListener('click',function(){alert(2);},false);

ie

document.attachEvent('onclick',function(){alert(1);});
document.attachEvent('onclick',function(){alert(2);});

点击可以依次弹出1,2

区别

addEventListener
兼容一般浏览器:

  1. 事件没有on
  2. 事件执行顺序是正序
  3. 支持捕获(事件捕获请点这篇文章)
  4. this指向触发事件的对象

attachEvent

  1. 事件有on
  2. 事件执行顺序,标准ie正序,非标准ie倒叙
  3. 不支持捕获
  4. this指向windows(关于this可以点js中的this总结)

当使用attachEvent的时候,就需要对内部的this进行重定向,一般有call和apply两种方法。详细可点apply和call


代码

function bind(obj, evname, fn) {
    if (obj.addEventListener) {
        obj.addEventListener(evname, fn, false);
    } else {
        obj.attachEvent('on' + evname, function() {//这里需要加上on 
            fn.call(obj);  //将this指向obj
        });
    }
}

给一个按钮绑定多个事件

var oBtn=document.getElmentById('btn1');
bind(oBtn,'click',fn1);
bind(oBtn,'click',fn2);
bind(oBtn,'click',fn3);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值