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

Javascript
如何用js控制css中的float的代码
Autocomplete Textbox Example javascript实现自动完成成功
FormValid0.5版本发布,带ajax自定义验证例子
wordpress之js库集合研究介绍
推荐发几个常用控件(新加DHTML控件)
7. Microsoft Online-Crash Control, version 6.0(微软在线崩溃控件)
javascript下阻止表单重复提交、防刷新、防后退
javascript下计数器每秒自动加1
给所有的超级练级都加上onmousemove时间的js代码
js实现运行代码需要刷新的解决方法
兼容FF/IE跟随鼠标的层的效果
用javascript获得css中的属性值的代码
用javascript实现页内搜索的脚本代码
用javascript 控制表格行的展开和隐藏的代码
用javascript实现隐藏状态栏的代码
Code: write(s,d) 输出连续字符串
javascript创建页面蒙板的一些知识技巧总结
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
用javascript判断输入数据是否货币并自动添加¥符号的代码
js类中获取外部函数名的方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 171 ::
收藏到网摘: 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>