zoukankan      html  css  js  c++  java
  • 封装事件绑定函数解决this在ie下的绑定问题

    封装一个事件绑定函数

    function addEven(obj,type,fn)
    {
       if(obj.attachEvent)
     {
       obj.attachEvent('on'+type,fn); 
      }
     else
     {
       obj.addEventListener(type,fn,false); 
     }
    }

    在ie下弹出this的时候不会弹出标签对象本身,而是弹出window,先来看看call()方法:函数的调用如a();实际上等同于a.call();

    例如有这样一个函数function a(){alert(this)}  这时结果是window,如果这样调用a.call('aaa');会弹出aaa,也就是说call里面的变量会改变函数this的值。

    因此封装绑定函数就可以调用call,这样来做

    function addEven(obj,type,fn)
    {
       if(obj.attachEvent)
     {
       obj.attachEvent('on'+type,function(){
          fn.call(obj)//里面的this的值变成obj 变成当前调用的标签对象
        }); 
        }
     else
     {
       obj.addEventListener(type,fn,false); 
     }
    }

    再进一步用三目运算优化就可以这样做

    function addEven(obj,type,fn)
    {
      return obj.attachEvent ? obj.attachEvent('on'+type,function(){fn.call(obj)}) : obj.addEventListener(type,fn,false); 
    }

    搞定

    Top
    收藏
    关注
    评论
  • 相关阅读:
    Python内置函数(33)——any
    Python内置函数(32)——all
    Mybatis相关SQL操作总结
    mybatis与oracle使用总结
    J2EE分布式服务基础之RPC
    J2EE企业级应用架构
    Dubbo模块介绍
    Dubbo简介
    Http之ContentType
    JSONP解决跨域方案
  • 原文地址:https://www.cnblogs.com/thinksley/p/2792258.html
Copyright © 2011-2022 走看看