如何解决attachEvent函数时,this指向被绑定的元素的问题?

时间:2024-04-28 09:33:29 

使用attachEvent对同一事件进行多次绑定,这是解决事件函数定义冲突的重要方法。但是在IE中,函数内的this指针并没有指向被绑定元素,而是function对象,在应用中,这是很难受的一件事,如果试图用局部变量传送元素,会因为闭包而引起内存泄漏。那么,我们应该如何解决这一难题呢?
    我给Function添加了原型方法“bindNode”,在这个方法里,根据传送过来的元素,进行全局性存储转换,然后返回经过封装的函数,使用call方法来进行属主转换。

<html>  <body>  <button id=btTest>test</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>



<html> <body> <button id=btTest>test</button> </body> </html> <script> abc() function abc(){     var bt=document.getElementById("btTest")      bt.attachEvent("onclick",function(){         //如果不经过bindNode处理,下面的结果将是undefined         alert(bt.tagName)     }) } </script>



不会引起闭包吧

当然会引起,请用drip测试http://www.script8.com/download/drip.rar

标签:如何解决attachEvent函数时,this指向被绑定的元素的问题,
0
投稿

猜你喜欢

  • python数据处理之Pandas类型转换的实现

    2021-04-11 11:17:36
  • MySQL数据库对dvbbs.php全文搜索的完全分析

    2010-06-11 13:25:00
  • 将数据从MySQL迁移到 Oracle的注意事项

    2008-12-03 15:41:00
  • 针对google Chrome的 CSS hacks

    2009-11-30 12:45:00
  • python3.7简单的爬虫实例详解

    2023-06-30 15:55:13
  • 在centos7下安装和部署java8和mysql

    2024-01-27 17:00:41
  • 两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法

    2023-06-25 12:44:15
  • 浅谈Python模块导入规范

    2021-02-03 03:39:37
  • 使用python库xlsxwriter库来输出各种xlsx文件的示例

    2022-04-27 14:50:30
  • Go定时器cron的使用详解

    2024-04-28 10:47:43
  • Vue2单一事件管理组件通信

    2024-05-29 22:30:03
  • vue实现在v-html的html字符串中绑定事件

    2023-07-02 16:44:08
  • Windows下python3.7安装教程

    2023-02-16 16:39:11
  • Go语言基础变量的声明及初始化示例详解

    2024-04-27 15:46:37
  • 详解Django中的ifequal和ifnotequal标签使用

    2023-06-24 05:07:04
  • 全兼容的纯CSS级联菜单要点浅析

    2009-06-10 14:42:00
  • python 字典操作提取key,value的方法

    2021-06-01 04:40:39
  • 解决IE6、IE7、Firefox兼容最简单的CSS Hack

    2007-10-14 10:51:00
  • Vue动态组件component标签的用法大全

    2024-05-29 22:28:33
  • php中$_GET与$_POST过滤sql注入的方法

    2023-07-13 14:38:12
  • asp之家 网络编程 m.aspxhome.com