总结JS事件处理程序(5种)

js的事件处理程序有五种类型,分别是:

(1)HTML事件处理程序;

(2)DOM0级事件处理程序;

(3)DOM2级事件处理程序;

(4)IE事件处理程序;

(5)跨浏览器的事件处理程序;

--------------------------------------------------------------------------------------

下面我们来分别解释一下这五种事件处理程序

(1)HTML事件处理程序:事件直接写在DOM节点内部

<button οnclick="say('hello')"></button>

<script>
    function say(msg) {
        alert(msg);
    }
</script>
(2)DOM0级事件处理程序:把一个函数赋值给一个事件的处理程序属性

<button id="btn"></button>

<script>
  var Btn = document.getElementById('btn');
  Btn.onclick = function() {
       alert('hello');
  }
</script>
在DOM0级事件处理程序上删除事件用下述方法:
Btn.onclick = null;

(3)DOM2级事件处理程序:可以给一个元素添加多个事件并绑定不同的事件方法

<button id="btn"></button>
<script>
// 将事件处理程序添加到事件的冒泡阶段,这样可以最大限度的兼容各大浏览器
    var Btn = document.getElementById('btn');
    Btn.addEventListener("click", function() {
        alert('hello');
    }, false);

    //通过addEventListener添加的事件,只能通过removeEventListener删除
    Btn.removeEventListener('click', function() {
        alert('hello');
    }, false);

</script>
(4)IE事件处理程序:IE有自己的一套事件处理程序,提供两个方法attachEvent()和detachEvent();

<button id="btn"></button>
<script>
var Btn = document.getElementById('btn');
    Btn.attachEvent("onclick", function(){
        alert('hello');
    });
    Btn.detachEvent("onclick", function(){
        alert('hello');
    });
</script>
IE下的事件都是以冒泡的方式执行事件监听函数,所以attachEvent()和detachEvent()方法只有两个参数,不需要是否捕获的参数。值得注意的是,IE下的事件监听函数中的this指向的是window,而不是事件所在的元素。
(5)跨浏览器的事件处理程序:其实就是用条件语句,针对不同浏览器,写不同的处理程序

//跨浏览器事件处理程序
    var eventUtil={
        //添加句柄(element:元素,type:事件类型,handler:事件处理函数)
        addHandler:function(element,type,handler){
            if(element.addEventListener){
                element.addEventListener(type,handler,false);
            }else if(element.attachEvent){
                element.attachEvent("on"+type,handler);
            }else{   //DOM0级事件处理程序的判断
                element['on'+type]=handler;
            }
        },
        //删除句柄(element:元素,type:事件类型,handler:事件处理函数)
        removeHandler:function(element,type,handler){
            if(element.removeEventListener){
                element.removeEventListener(type,handler,false);
            }else if(element.detachEvent){
                element.detachEvent("on"+type,handler);
            }else{   //DOM0级事件处理程序的判断
                element['on'+type]=null;
            }
        }
    };



  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值