Javascript Internet Explorer中的mousemove问题

Javascript Internet Explorer中的mousemove问题,javascript,internet-explorer,Javascript,Internet Explorer,当事件目标位于元素上方且缺少背景时,Internet explorer不会激发MouseMove事件 但当目标有背景时,它确实会注册事件。有人对此有解释吗?我在IE10、IE9和IE8中也有同样的行为 在这里拉小提琴: 又一个IE失败了!这与其说是一个答案,不如说是一个解决办法,但似乎效果不错: var is_ie = $.browser.msie; if(is_ie){ $('.main img').mousemove(function(e){ $('.pageX').

当事件目标位于
元素上方且缺少背景时,Internet explorer不会激发MouseMove事件

但当目标有背景时,它确实会注册事件。有人对此有解释吗?我在IE10、IE9和IE8中也有同样的行为

在这里拉小提琴:
又一个IE失败了!这与其说是一个答案,不如说是一个解决办法,但似乎效果不错:

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

这是对
$('.overlay').mousemove功能的补充,所以也要保留这一功能,当然
是可选的,即
检查是可选的。

当OP询问原因时,我的突破是:

直观解释更容易,因此首先让我们向
img
s添加一个单击处理程序:

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

很公平。在Chrome/Firefox/not IE浏览器中单击图像,将不会发生任何事情,因为绝对定位的
div
会覆盖它

现在在IE上试用它。
img
的点击处理程序被触发!因此,它表明IE通过绝对定位的“透明”(无内容或背景)元素推动元素。更有趣的是,相对定位的元素遇到了相同的问题,在其中一个/两个元素上设置
z-index
也不能解决这个问题。当然,由于图像位于覆盖层上方,它不会触发覆盖层的
mousemove
事件

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

我从未在任何规范中看到过这种定义,也没有正式报告为bug。没有逻辑或理由让没有内容或背景的绝对定位元素遭受z-index问题,因此我将其称为另一个IE bug。也许在网上报道会有用


另外,相关问题:

+1个有趣的问题。我知道这不是你要求的,但是给叠加一个背景,比如
background:rgba(0,0,0,0)似乎在IE10预览中修复了它。您可以看到,在框中未被图像覆盖的部分,文本确实会更新。^实际上是相反的。覆盖层覆盖了图像。带有背景的覆盖会触发
mousemove
。更有趣的是,如果在覆盖中添加一些文本内容而不对其应用任何背景样式,则只有在将鼠标移到文本上方时才会触发mousemove事件。还有一个我以前从未见过的IE bug。我想我只是不经常使用
mousemove
。正如你的问题所暗示的那样,下方图像的
position:absolute
与问题直接相关。例如,如果覆盖部分位于图像上方,则表明IE仅在您悬停位于绝对定位覆盖下方的图像时无法触发mousemove事件。
img如何在绝对定位“透明”上方结束div
我认为可能是当绝对定位元素没有背景时(即认为它不存在)。逻辑(@Derek嗯,是的,这就是我在上面一段中得出的结论。没有内容和背景的元素是我称之为“透明”的元素,这些元素存在z索引错误。当我说“不知道”时,我实际上是指类似的东西“我从未见过任何规范中定义的,也没有正式报告为错误”。我想这是一个更好的说法,将替换为答案。
=]
感谢您的澄清:')