解决使用attachEvent函数时this指向被绑定的元素的问题的方法

2016-02-19 09:22 14 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的解决使用attachEvent函数时this指向被绑定的元素的问题的方法教程,一起来看看吧!超容易上手~

【 tulaoshi.com - Web开发 】

使用attachEvent对同一事件进行多次绑定,这是解决事件函数定义冲突的重要方法。但是在IE中,函数内的this指针并没有指向被绑定元素,而是function对象,在应用中,这是很难受的一件事,如果试图用局部变量传送元素,会因为闭包而引起内存泄漏。那么,我们应该如何解决这一难题呢?

   我给Function添加了原型方法“bindNode”,在这个方法里,根据传送过来的元素,进行全局性存储转换,然后返回经过封装的函数,使用call方法来进行属主转换。



html
body
button id=btTesttest/button
/body
/html
script
if(!document.all){
   HTMLElement.prototype.attachEvent=function(sType,foo){
       this.addEventListener(sType.slice(2),foo,false)
   }
}
Function.prototype.bindNode=function(oNode){
   var foo=this,iNodeItem

   //使用了全局数组__bindNodes,通过局部变量iNodeItem进行跨函数传值,如果直接传送oNode,也将造成闭包
   if(window.__bindNodes==null)
       __bindNodes=[]
   __bindNodes.push(oNode)
   iNodeItem=__bindNodes.length-1
   oNode=null
   return function(e){
       foo.call(__bindNodes[iNodeItem],e||event)
   }
}
abc()
function abc(){
   var bt=document.getElementById("btTest")
   bt.attachEvent("onclick",function(){

       //如果不经过bindNode处理,下面的结果将是undefined
       alert(this.tagName)
   }.bindNode(bt))
   bt=null
}
/script

来源:http://www.tulaoshi.com/n/20160219/1590535.html

延伸阅读
项目DALFactory是采用工厂模式设计的,设计模式的书我也曾看过java的设计模式,理解也不太深刻,但对工厂模式还是较为熟悉,使用它可以根据需求返回不同的实例对象,在DALFactory项目中使用反射机制来实现依赖注入,当然,它的实现还是没有java中的spring那样灵活,强大,部分代码如下: // <summary> /// 抽象工厂模式创建DAL。 /// web.co...
标签: 电脑入门
下面,给您介绍AREAS函数的使用方法。 函数语法:AREAS(reference)。 函数功能:返回参数引用中包含的区域个数。 参数说明:Reference是对某一单元格或单元格区域的引用,也可以引用多个区域。 实例: 公式=AREAS(a2:b4)返回1, =AREAS((A1:A3,A4:A6,B4:B7,A16:A18))返回4。 函数 结果 说明 =AREAS(C2:D4) 1 引用中包含的区域个数 ...
标签: Web开发
当鼠标移到产品缩略图上时能弹出显示大图,用JS写两个函数即可实现: 一个函数在鼠标移到图片上调用,显示隐藏层并将图片载入到层中; 另一个函数在鼠标移出图片上调用,清空层的内容并隐藏层。使用时需将"this.src"改为产品大图地址。 以下是引用片段: html head meta http-equiv="Content-Type" content="text/html; charse...
标签: 电脑入门
有不少腾讯QQ用户在登陆QQ软件时遇到提示“请输入您在图片看到的字符”这是怎么回事呢? 登陆的地点和上次登陆的一地点是一样的。听QQ音乐也要输入.,可是并没有显示在别的地方登陆,这是怎么回事?     关于此问题,腾讯推出验证码的功能主要是为了保障您的权益,为了防止盗号者使用恶意软件以登录的方式扫描您的密码,请您...
标签: Web开发
  JSP显示中文有乱码怎么办,用request得到的用户输入的中文怎么是乱码,把汉字写到数据库怎么是乱码,等等一些关于汉字乱码的问题。其实这个问题很简单,管它汉字不汉字,还是日文,还是其他的什么双字节的语言,我们一律把它当作UTF-8看待。       (一)request中的双字节文字     &nb...

经验教程

149

收藏

25
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部