如何解决attachEvent函数时,this指向被绑定的元素的问题?
发布时间:2024-04-28 09:33:29
标签:如何解决attachEvent函数时,this指向被绑定的元素的问题,
使用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


猜你喜欢
- 这是针对oracle编写的,可以用在不同的电脑上,因为它会自动读取当前电脑的环境变量,从而取得oracle的安装路径,唯一有一点不足的地方是
- Python中的切片知识.在Python中,切片(slice)是对序列型对象(如list, string, tuple)的一种高级索引方法。
- Python 截取字符串使用 变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到
- functools模块是Python的标准库的一部分,它是为高阶函数而实现的。高阶函数是作用于或返回另一个函数或多个函数的函数。一般来说,对
- Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它
- 冻结的集合前面一节讲述了集合的基本概念,注意,那里所涉及到的集合都是可原处修改的集合。还有一种集合,不能在原处修改。这种集合的创建方法是:&
- 本文介绍了Python格式化输出%s和%d的实例案例。分享给大家供大家参考,具体如下:python print格式化输出1. 打印字符串pr
- 想要实现的功能空列表中添加数原代码:FitnessBest = []FitnessBest = FitnessBest.appe
- 1. 打开FrontPage 2003,点击“文件→新建→新建网站→其他网站模板”,然后选择“数据库界面向导”,给定网站路径后,单击[确定]
- 基于 Snapchat 的增强现实胡子挂件融合第一个项目中,我们将在检测到的脸上覆盖了一个小胡子。我们可以使用从摄像头捕获的连续视频帧,也可
- 1.官网下载:https://dev.mysql.com/downloads/找到Mysql Community Server 点击点击do
- SQLPlus是进行Oracle操作的主要前台工具,用户名和密码分别为用户名和密码,连接ORACLE数据库可见,显示的比较混乱,可以通过以下
- 本文实例讲述了Python高级特性之闭包与装饰器。分享给大家供大家参考,具体如下:闭包1.函数参数:(1)函数名存放的是函数的地址 (2)函
- sign签名是用于提供给外部(第三方)调用的接口,调用方需要提供正确的appkey钥匙才能调用,确保了接口的安全性。签名参数sign生成方法
- 下载地址:https://www.percona.com/downloads/XtraBackup/安装xtrabackup[root@no
- 暂时是一个手动设置无向图中的边,用一个二维数组表示,后面会改进为用户自己定义无向图的边。学习python的新手,若大佬有解决的办法,希望不吝
- 本文实例讲述了mysql代码执行结构。分享给大家供大家参考,具体如下:本文内容:什么是代码执行结构顺序结构分支结构循环结构 首发日
- 大家好,我们经常会有这样的需求。比如下图我们需要把同一个省份的合并起来,如下图的效果如何实现呢,这是原有的df直观的操作是这样的:df.to
- 提取python字符串括号中的内容一些数据按字符串保存,如str1 = '(1, 0.123) (2, 0.234)',当我
- 这篇文章主要介绍了python函数不定长参数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的