当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 解决使用attachEvent函数时,this指向被绑定的元素的问题的方法

Javascript
javascript显弹效果代码增加了cookies控制
通过修改referer下载文件的方法
js简单的表拖拽
javascript Error 对象 错误处理
[原创]discuz中用到的javascript函数解析
js 加载时自动调整图片大小
JS入门代码集合
css客齐集社区头像显示效果
使用jscript实现二进制读写脚本代码
国外的为初学者写的JavaScript教程
比较详细的javascript DOM 学习笔记
符合W3C Web标准的图片连续无间隙水平滚动
Javascript入门学习第五篇 js函数
点图片上一页下一页翻页效果
js鼠标、键盘事件实例代码
JavaScript 图片切换展示效果alibaba拓展版
Javascript 小技巧全集
两表格传递变量
收集整理的四个方向的滚动
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 264 ::
收藏到网摘: n/a

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