mouseover与mouseout事件,会涉及把鼠标指针从一个元素的边界之内移到另一个元素的边界之内。对于mouseover而言,事件的主要目标是获取光标元素,而相关元素就是那个失去光标的元素。类似的mouseout事件而言,事件的主目标是失去光标元素,而相关元素则是获得光标元素。
DOM通过event对象的relatedTarget属性提供了相关元素的信息。这个属性只对与mouseover和mouseout事件才包含值;对于其他事件,这个属性的值是null。IE不支持relatedTarget属性,但提供了保存同样信息的不同属性。在mouseover事件触发时IE的fromElement属性中保存了相关元素;在mouseout事件触发时,IE的toElement属性保存了相关元素。如下跨浏览器获取相关属性的方法:
//事件对象 移入移出
function addEvent(obj,type,fn){
if(obj.addEventListener){
obj.addEventListener(type,fn,false);
}else if(obj.attachEvent){
obj.attachEvent('on'+type,fn);
}
}
function removeEvent(obj,type,fn){
if(obj.removeEventListener){
obj.removeEventListener(type,fn,false);
}else if(obj.detachEvent){
obj.detachEvent('on'+type,fn);
}
}
addEvent(window,'load',function(){
var box=document.getElementById('box');
addEvent(box,'mouseover',function(evt){
alert(getTarget(evt));
});
});
function getTarget(evt){
var e=evt||window.event;
if(e.srcElement){//IE
if(e.type=='mouseover'){
return e.fromElement.tagName;
}else if(e.type=='mouseout'){
return e.toElement.tagName;
}
}else if(e.relatedTarget){//W3C
return e.relatedTarget;
}
}