JavaScript事件,函数封装

       我们知道在JavaScript中,为元素添加事件,有三种方法,为了更好的让各种浏览器兼容,我们就可以把这些方法封 装成一个函数,方便使用。首先我们看一下这三种添加事件的方法:

    

                 elem.onxxx = function(){} // this指向dom元素本身
              obj.addEventListerner(type,fn,false); // this指向dom元素本身
              obj.attachEvent("on" + type ,fn); // this指向window

  其中:

     (1):elem.onxxx = function(){};这是DOM0级别的事件处理程序,由于this指向dom元素本身,所以在这个事件处理程序中通过this            可以访问元素的任何属性和方法

     (2):obj.addEventListerner(type,fn,false);这是DOM2级事件处理程序,参数“type”为事件类型(如"click"),fn为作为事件处理程序

        的一个函数,最后的一个参数为布尔值,若为true,表示在捕获阶段调用事件处理程序;如果为false,表示在冒泡阶段调用事件         处理程序;通过addEventListerner()添加的事件处理程序只能使用removeEventListerner()来移除

      var btn = document.getElementById("mybtn");

      var handler = function(){

        alert("Hello");

      }

      btn.addEventListerner("click",handler,false);

      btn.removeEventListerner("click",handler,false);

  这也意味着添加的匿名函数将不能被移除

    (3):IE处理事件;obj.attachEvent("on "+ eventType,fn);使用attachEvent()添加的事件也可以通过detachEvent()来移除;这也意味着添加的匿名函数不能被移除

 

接下来我们就可以使用这些事件处理程序来封装符合各种浏览器兼容性的函数了

/*封装addEvent函数,实现兼容性更好的事件绑定方法
handle为事件处理函数,type为事件类型*/

function addEvent(elem,type,handle){
if(elem.addEventListener){
            elem.addEventListener(type,handke,false);
}else if(elem.attachEvent){
        elem.attachEvent("on" + type,function(){
            handle.call(elem);
})
}else{
                elem["on" + type] = handle;
}
}

/*封装一个取消冒泡的函数 stopBubble(event)
更好的实现浏览器兼容
*/

function stopBubble(event)
{
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble = true;
}
}

/*
封装阻止默认事件的函数 cancleHandler
*/

function cancleHandler(event)
{
if(event.preventDefault)
{
event.preventDefault();
}else{
event.returnValue = false;
}
}

  

转载于:https://www.cnblogs.com/wxc-cs-97/p/9519760.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值