浏览 1447 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-12-12
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//ZH-CN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org">
<meta http-equiv="Content-Type" content=
"text/html; charset=UTF-8">
<title></title>
</head>
<body>
<input type="button" id="test" value="点击"/>
<script type="text/javascript">
function kk(n){
this.k1=n;
var obj=document.getElementById("test");
obj.parentClass=this;
this.show();
}
kk.prototype.show=function(){
var obj=document.getElementById("test");
if(obj.attachEvent){
obj.attachEvent("onclick",this.clickEvt);
}else if(obj.addEventListener){
obj.addEventListener("click",this.clickEvt,false);
}
// obj.onclick=this.clickEvt;
}
kk.prototype.clickEvt=function(){
alert(this.parentClass.k1);
// alert("BI")
}
new kk("rain");
</script>
</body>
</html>
为什么上面代码在火狐中能行,在IE中就出错呢? 如果改为alert("BI");两个浏览器都能运行; 如果改用obj.onclick=this.clickEvt来绑定事件,alert(this.parentClass.k1)在IE和火狐都能运行; 琢磨着是不是this.parentClass.k1的this在两个浏览器中指代的对象不同,会不会是因为onclick和click的不同所引起的呢??希望各位同仁指点一下,谢谢 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-12-12
attachEvent不能指定this,this会指向window的bug而已
|
|
| 返回顶楼 | |
|
最后更新时间:2007-12-12
写了一个你的改版,这种写法是ext的风格,充分利用闭包机制,解决this的问题
<script type="text/javascript">
var obj = function(){
var o = document.getElementById('test'),k1;
return {
init:function(n){
k1 = n;
this.show();
},
show:function(){
o.attachEvent?o.attachEvent("onclick",this.clickEvt):o.addEventListener("click",this.clickEvt,false);
},
clickEvt:function(){
alert(k1);
}
};
}();
obj.init('rain');
|
|
| 返回顶楼 | |
|
最后更新时间:2007-12-12
简单的这样
ele.addEventListener=function(a,b){
a+="on";
var temp=this;
this.attachEvent(a,function(e){b.call(temp,e)})
}
但是由于匿名函数给弄scope里面了,没办法拿引用remove了,所以只是为了学习用,实际当中可以把handler引用弄到对象上起个名字,就可以remove了 |
|
| 返回顶楼 | |
|
最后更新时间:2007-12-13
好,谢谢楼上各位
上面那些代码要好好消化下了 |
|
| 返回顶楼 | |
|
最后更新时间:2007-12-13
给出传统解法1:也是我常用的写法,两种浏览器通过
js 代码
| |






