封装一个事件绑定函数

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); 
}

搞定

转载于:https://www.cnblogs.com/thinksley/archive/2012/11/28/2792258.html

封装事件绑定函数解决this在ie下的绑定问题相关推荐

  1. JavaScript封装一个注册函数解决兼容问题

    我们知道JavaScript注册(绑定)事件主要有两类方式,第一类传统方式具有注册事件的唯一性,即对于同一元素的同一事件,不会出现两个处理函数,如下 var btn = document.queryS ...

  2. JS之事件处理(一)--事件概述、非IE浏览器/IE浏览器中的事件绑定、解决浏览器事件绑定兼容性问题

    一.概述 描述:事件本质是一种交互操作,事件通常与函数配合使用,当事件发生时函数才会执行 事件是由三部分组成的:事件源 事件类型 事件处理程序 事件源:事件被触发的对象–谁 事件类型:如何触发 什么事 ...

  3. js循环绑定事件问题及解决方法

    js初学者经常遇到的循环绑定事件问题 js循环绑定事件 在编写JS代码的时候,我们经常会遇到要对一系列元素进行事件绑定的情况,然后就会理所当然的开一个for循环,对元素的事件进行赋值等操作,最后运行的 ...

  4. [vue] vue给组件绑定自定义事件无效怎么解决?

    [vue] vue给组件绑定自定义事件无效怎么解决? 两种方式 1.组件外部加修饰符.navtive 2.组件内部声明$emit('自定义事件') 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放 ...

  5. html onblur 函数执行了2次,JavaScript“onblur事件”调用函数失效 原因与解决方法

    由于JavaScript事件有很多,例如: 鼠标事件:onclick 键盘事件:onkeydown.onkeypress 表单事件:onblur.onchange 窗口事件属性:onerror.onl ...

  6. 给动态动态生成元素绑定事件不生效解决方法

    如题:动态生成的元素绑定事件后没有生效,或者说操作时没有效果 js,jq动态生成的元素,在绑定前,先一定要确认,执行绑定操作的时候,该元素是不是已经存在在页面上,也就是html上了,假如执行绑定的时候 ...

  7. 前端面试 - JS总结(1) - 基础 (数据类型, 事件与函数, 原型链)

    你不走出舒适圈,又怎么知道自己多坚强?! 前端面试 - JS总结(1) - 基础 (数据类型, 事件与函数, 原型链) 前端面试 - JS总结(2) - ES6 (let, 箭头函数, this) 前 ...

  8. ajax点击事件无法触发,解决jQuery Ajax动态新增节点无法触发点击事件的问题_婳祎_前端开发者...

    在写ajax加载数据的时候发现,后面添加进来的demo节点元素,失去了之前的点击事件.为什么点击事件失效,我们该怎么去解决呢? 其实最简单的方法就是直接在标签中写οnclick="" ...

  9. 关于前台调用后台事件__doPostBack函数

    关于前台调用后台事件__doPostBack函数 作者:admin 日期:2006-04-11 字体大小: 小 中 大 这里需要提一下的是,asp.net编程提供了服务端控件和客户端控件的说法,其实还 ...

最新文章

  1. linux C编程之makefile
  2. java将数据流解析为字符串
  3. Linux学习总结(77)—— Shell 开发运维经验总结
  4. 后台产品基本功:RBAC权限后台角色与权限设计
  5. rad linux下安装mysql_Rad Hat Enterprise Linux 5.5上安装Oracle 11g R2
  6. 面试题之TCP三次握手和四次挥手详解
  7. CC2540和CC2541蓝牙芯片将升级为蓝牙5.0
  8. win7系统怎么用计算机,Win7系统中计算器怎么用
  9. 为Linux安装虚拟PDF打印机
  10. 程序员如何学习一门新技术?
  11. C/C++中的五个预定义的宏名
  12. 这几招教你如何增加食物中铁的吸收
  13. linux 查看nas磁盘阵列,NAS(linux)阵列管理
  14. heapdump file must have .hprof extention
  15. 管理的本质是协调还是决策?看看孙权是怎么做到的。
  16. 如何获取新浪微博数据
  17. QT——可视化界面ui
  18. 亚马逊云科技 Community Builder 申请窗口开启
  19. 【教学】深度学习小项目汇总_含源代码包运行
  20. 点菜系统数据库设计说明书

热门文章

  1. poj2516 最小费用最大流
  2. Numpy中矩阵对象
  3. golang中的os包
  4. 网站的高性能架构-性能测试方法
  5. IAR建立stm32工程
  6. Thymeleaf中each标签遍历list如何获取index
  7. 数据结构:基数排序(Radix sort)
  8. 设计模式:单例模式之枚举
  9. Java 基础 之 关系运算符
  10. MVVM架构~knockoutjs系列之验证成功提示显示