javascript 兼容FF的onmouseenter和onmouseleave的代码

javascript 兼容FF的onmouseenter和onmouseleave的代码

  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