2013-01-13 223 views
5

当事件目标位于<img>元素上且缺少背景时,Internet Explorer不会触发onmousemove事件。Internet Explorer中的mousemove问题

但是它确实在目标有背景时注册事件。有没有人对此有过解释?我在IE10,IE9和IE8中有相同的行为。

小提琴这里: http://jsfiddle.net/xSpqE/2/

+2

+1有趣的问题。我知道这不是你所要求的,但给覆盖层一个背景,比如'background:rgba(0,0,0,0);'似乎可以在IE10预览中修复它。 [小提琴](http://jsfiddle.net/xSpqE/16/) –

+0

您可以看到,在未被图像覆盖的方框部分,文字会更新。 – kenstone

+1

^实际上是相反的。覆盖图覆盖图像。与背景叠加触发'mousemove'。更有趣的是,如果将某些文本内容添加到叠加层而不应用任何背景样式,则只有在将鼠标移动到文本上时才会触发mousemove事件。还有一个我以前从未遇到的IE错误。我想我只是不经常使用'mousemove'。 –

回答

0

另一个IE失败!这更是一个解决方法不是一个答案,但它似乎好了工作:

var is_ie = $.browser.msie; 
if(is_ie){ 
    $('.main img').mousemove(function(e){ 
     $('.pageX').text('pageX: '+e.pageX); 
    } 
} 

也就是说除了$('.overlay').mousemove功能,所以只能暂时过了,当然is_ie检查是可选的。

2

至于OP问是有原因的,这是我的突破:

它更容易直观地解释,所以首先让我们点击处理程序添加到img S:

$('img').click(function() { 
    $('.pageX').text('img clicked!'); 
}); 

Fiddle

很公平。您在Chrome/Firefox /非IE浏览器中点击图片,因为绝对定位的div覆盖它,所以不会发生任何事情。

现在试试IE。 img的点击处理程序被解雇!因此它显示IE通过绝对定位的“透明”(无内容或背景)元素推送元素。更有趣的是,相对定位的元素会遇到同样的问题,并且在任一元素上设置z-index也不会解决它。当然,由于图片位于叠加层上方,因此不会触发叠加层的事件。

解决方法是向覆盖图提供一些“填充”,例如background:rgba(0,0,0,0)将强制IE将绝对定位的元素保留在顶部。 Fiddle。如果您需要支持没有rgba支持的浏览器,请使用1x1px透明gif作为背景。

我从来没有在任何规范中看到过这个定义,也没有正式报告过错误。没有内容和背景的绝对定位元素没有任何逻辑或理由可以承受这种Z-index问题,因此我将把它称为又一个IE错误。也许报告Microsoft forums会有用。

此外,相关问题:IE bug: absolutely-positioned element with a non-transparent background colour

+1

'img如何在绝对定位的“透明”div上方结束我认为它可能是绝对定位的元素没有背景时,IE认为它不在那里。 IE逻辑。 :( –

+0

@Derek好的,这就是我在上面的段落中总结的结论:没有内容和背景的元素就是我所说的“透明”,它们遭受了这个Z-index错误,当我说“不知道”时,我居然意思是“我从来没有见过这种在任何规范中定义过的,也没有官方报告过的错误”,我想这是一个更好的陈述,将其替换为答案。'=]' –

+1

感谢您的澄清: “) –