请教个关于跨浏览器方案解决的问题
这样子实现的化,我发现还是会存在一个误区,比如说调用该对象的方法的时候,this对象的指向就会存在分歧, 不知道它是指向window还是当前的对象. 等于还是要再判断一下,要么就是不用this对象, 这样子说来我感觉还是存在着缺陷. 怎么样改进呢?因为它最终还是调用detachEvent啊, 怎么变呢?
47
收起
正在回答 回答被采纳积分+1
4回答
小学生6年级
2018-05-15 20:22:29
var eventUtil = {
// addEvent : function(elem,type,handler){
// if(elem.addEventListener){
// elem.addEventListener(type,handler,false);
// }else{
// elem.attachEvent('on'+type,handler)
// }
// },
addEvent : function(elem,type,handler){
if(elem.attachEvent){
elem.attachEvent('on'+type,handler);
}else{
elem.addEventListener(type,handler,false);
}
}
}我猜想了几个可能原因,一一试了一下找到了, 老师你像这样再试一下,就会神奇的发现 在IE中 this===window了!!!!!!!!!!!!!!! 也就是调换了一下顺序, 我真是服了...技不如人. 为什么会这样.... 需要说明的是chrom中我也测试了, 并不受顺序的影响 .指向均为DOM元素
小学生6年级
2018-05-15 14:59:50
var eventUtil = {
addEvent : function(elem,type,handler){
if(elem.addEventListener){
elem.addEventListener(type,handler,false);
}else{
elem.attachEvent('on'+type,handler)
}
},
removeEvent : function(elem,type,handler){
if(elem.removeEventListener){
elem.removeEventListener(type,handler,false);
}else{
elem.detachEvent('on'+type,handler)
}
},
stopPropagation : function(event){
return event.stopPropagation() || (event.cancelBubble = true);
},
getTarget : function(event){
return event.target || event.srctElement;
},
preventDefault : function(event){
return evnt.preventDefault() || (event.returnValue = false);
}
};贴下代码吧, 就是addEvent主要负责判断l浏览器,本质实现还是依赖内置的方法,这两个内置方法对传入的handler(function)中的this指向有不同的判断, 这里存在分歧! .... 应该描述挺清楚了吧...
组件化思想开发电商网页 18版
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星