ах и еще, насчет
this в ИЕ он равен объекту window. Поэтому нужно делать так:
function handleMouseenter(handler) {
return function(e) {
e = e || event; // IE
var target = e.target || e.srcElement;
var toElement = e.relatedTarget || ( e.fromElement === target ? e.toElement : e.fromElement ) || null;
var fromElement = toElement;
// проверяем, мышь пришла с элемента внутри текущего?
while (toElement && toElement !== target) {
toElement = toElement.parentNode;
}
if (toElement == target || fromElement.parentNode.id == "subMenu") { // да, внутри
return; // значит мы перешли на родителя из потомка, лишнее событие
}
return handler.call(target, e);
};
}