按照《javascript高级程序设计》中的第13章代码实现的。
以下是报错相关的代码:
var eventUtil={
addHandler:function(element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);
}else if(element.attachEvent){
element.attachEvent("on"+type,handler);
}else{
element["on"+type]=handler;
}
},
getTarget:function(event){
return event.target || event.srcElement;
},
getRelatedTarget:function(event){
if(event.relatedTarget){
return event.relatedTarget;
}else if(event.toELement){
return event.toElement;
}else if(event.fromElement){
return event.fromElement;
}else{
return null;
}
}
};
var handlerMouseout = function(event){
event = eventUtil.getEvent(event);
var target = eventUtil.getTarget(event);
var relatedTarget = eventUtil.getRelatedTarget(event);
console.log("Mouse out from " + target.tagName + " to " + relatedTarget.tagName);
};
var myDiv = document.getElementById("myDiv");
eventUtil.addHandler(myDiv, "mouseout", handlerMouseout);
其中myDiv
是HTML中的一个div元素。
以下是问题:
在其他浏览器中运行无问题,但用IE8运行时会出现2条错误。
一、 window.load以后控制台里显示SCRIPT5:类型不匹配
,指向addHandler段中的
else if(element.attachEvent){
element.attachEvent("on"+type,handler);
}
属于针对IE8以下兼容的代码,但想不明白哪里不匹配了。
二、 在对myDiv
进行mouseover
和mouseout
操作时,其他浏览器控制台会正常返回Mouse out from DIV to HTML
或Mouse out from DIV to DIV
但IE8会返回SCRIPT3:找不到成员
并指向getTarget
部分
getTarget:function(event){
return event.target || event.srcElement;
}
但IE8不是应该支持srcElement
属性吗?