2011-02-13 72 views
1

我有一个绝对定位的div,我试图触发mouseenter和mouseleave事件。在IE8/7中,div的背景颜色未指定(因此它默认为透明),当光标穿过div的边界时,mouseenter/leave事件不会触发,只在div中间的某处以及光标位于div内的任何文本上。IE 8指定背景颜色更改元素行为

当我尝试通过向div添加背景颜色(例如background-color:green)来调试问题时,问题就神奇地消失了。 div的盒子模型非常完美,mouseenter /如预期的那样开火。只有当div的背景颜色未指定(甚至明确设置为透明)时,它才表现不正确。

任何想法?谷歌搜索这个IE bug/quirk没有任何东西。

+0

有些代码好吗? – 2011-02-13 07:14:16

+2

这是我以前见过的IE中的一个bug。如果一个元素是100%透明的,那么IE不会将其视为鼠标事件。 – 6502 2011-02-13 07:30:14

回答

4

直到光标到达可见的东西,mouseenter和mouseleave才会注册。这不正确的行为,但这是我们正在处理的资源管理器。

两个可能的解决方案:

  1. 把细边框上的DIV,一个匹配无论是它的背后,也不会被注意到。(这不起作用;请参阅评论。)
  2. 跟踪鼠标移动事件并让您的代码确定鼠标何时进入感兴趣的区域。
  3. (已添加;请参阅评论。)使您的背景成为平铺的透明1x1图像。

不幸的是,两种解决方案都非常糟糕。

编辑:问:mouseover和mouseout是否显示相同的奇怪行为?

0

要补充的是:在上面的答案中,使用解决方案3时,onclick也会触发。总体而言,这是一个很好的解决方法,用于在IE中的透明元素上点击透明元素。