Posted in Javascript onJuly 19, 2008
IE下有 onmouseenter和onmouseleave来解决。
可惜ff就没有。 我再想 , 为什么这么好的功能,为什么ff不引用呢?
还有ie中的onpropertychange ,哎,ff中都没有。。。
对比例子中引入了一段js ,来兼容FF的onmouseenter和onmouseleave. :
var xb = { evtHash: [], ieGetUniqueID: function(_elem) { if (_elem === window) { return 'theWindow'; } else if (_elem === document) { return 'theDocument'; } else { return _elem.uniqueID; } }, addEvent: function(_elem, _evtName, _fn, _useCapture) { if (typeof _elem.addEventListener != 'undefined') { if (_evtName == 'mouseenter') { _elem.addEventListener('mouseover', xb.mouseEnter(_fn), _useCapture); } else if (_evtName == 'mouseleave') { _elem.addEventListener('mouseout', xb.mouseEnter(_fn), _useCapture); } else { _elem.addEventListener(_evtName, _fn, _useCapture); } } else if (typeof _elem.attachEvent != 'undefined') { var key = '{FNKEY::obj_' + xb.ieGetUniqueID(_elem) + '::evt_' + _evtName + '::fn_' + _fn + '}'; var f = xb.evtHash[key]; if (typeof f != 'undefined') { return; } f = function() { _fn.call(_elem); }; xb.evtHash[key] = f; _elem.attachEvent('on' + _evtName, f); // attach unload event to the window to clean up possibly IE memory leaks window.attachEvent('onunload', function() { _elem.detachEvent('on' + _evtName, f); }); key = null; //f = null; /* DON'T null this out, or we won't be able to detach it */ } else { _elem['on' + _evtName] = _fn; } }, removeEvent: function(_elem, _evtName, _fn, _useCapture) { if (typeof _elem.removeEventListener != 'undefined') { _elem.removeEventListener(_evtName, _fn, _useCapture); } else if (typeof _elem.detachEvent != 'undefined') { var key = '{FNKEY::obj_' + xb.ieGetUniqueID(_elem) + '::evt' + _evtName + '::fn_' + _fn + '}'; var f = xb.evtHash[key]; if (typeof f != 'undefined') { _elem.detachEvent('on' + _evtName, f); delete xb.evtHash[key]; } key = null; //f = null; /* DON'T null this out, or we won't be able to detach it */ } }, mouseEnter: function(_pFn) { return function(_evt) { var relTarget = _evt.relatedTarget; if (this == relTarget || xb.isAChildOf(this, relTarget)) { return; } _pFn.call(this, _evt); } }, isAChildOf: function(_parent, _child) { if (_parent == _child) { return false }; while (_child && _child != _parent) { _child = _child.parentNode; } return _child == _parent; } }; 本篇文章来源于 cssrain.cn 原文链接:http://www.cssrain.cn/article.asp?id=952
javascript 兼容FF的onmouseenter和onmouseleave的代码
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@