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


Posted in Javascript onAugust 13, 2007

使用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>

Javascript 相关文章推荐
javascript document.execCommand() 常用解析
Dec 14 Javascript
jQuery 常见开发使用技巧总结
Dec 26 Javascript
基于Jquery的实现回车键Enter切换焦点
Sep 14 Javascript
javascript showModalDialog 内跳转页面的问题
Nov 25 Javascript
jquery append()方法与html()方法的区别及使用介绍
Aug 01 Javascript
JavaScript中的类(Class)详细介绍
Dec 30 Javascript
谈谈对offsetleft兼容性的理解
Nov 11 Javascript
js+css实现select的美化效果
Mar 24 Javascript
jquery实现简单的banner轮播效果【实例】
Mar 30 Javascript
关于javascript sort()排序你可能忽略的一点理解
Jul 18 Javascript
Node.js实现一个HTTP服务器的方法示例
May 13 Javascript
jQuery操作事件完整实例分析
Jan 10 jQuery
Track Image Loading效果代码分析
Aug 13 #Javascript
不错的JS中变量相关的细节分析
Aug 13 #Javascript
javascript-TreeView父子联动效果保持节点状态一致
Aug 12 #Javascript
TopList标签和JavaScript结合两例
Aug 12 #Javascript
Javascript-Mozilla和IE中的一个函数直接量的问题分析
Aug 12 #Javascript
IE和Mozilla的兼容性汇总event
Aug 12 #Javascript
收藏Javascript中常用的55个经典技巧
Aug 12 #Javascript
You might like
用libTemplate实现静态网页的生成
2006/10/09 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
Python实现多属性排序的方法
2018/12/05 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
Django 返回json数据的实现示例
2020/03/05 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
普天C++笔试题
2016/03/20 面试题
中学生打架检讨书
2014/02/10 职场文书
学校募捐倡议书
2014/05/14 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
郭明义观后感
2015/06/08 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书