如何在鼠标悬停在输入元素文本上时,在IE中触发CSS悬停事件?

如何在鼠标悬停在输入元素文本上时,在IE中触发CSS悬停事件?

问题描述:

如果将鼠标悬停在单词“测试”上,我将IE与下面的HTML结合使用,无法将输入的背景变为红色。但是,如果我将鼠标悬停在单词“测试”右侧的区域上,但仍位于输入元素的范围内,它会变为红色。这在Firefox或Chrome中不会发生。什么是正确的方式来定义我的风格,以使其在IE中正常工作?如何在鼠标悬停在输入元素文本上时,在IE中触发CSS悬停事件?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head> 
    <title></title> 
    <style type="text/css"> 
     input { border: 0px; margin:0; padding:0; } 
     input:hover { background: red } 
    </style> 
    </head> 
    <body> 
    <input type="text" value="Test" /> 
    </body> 
</html> 
+0

四个答案为止已经拿到了棒的右端的无:hover支持和其他的东西。所描述的问题发生在IE8和IE9中(我没有测试旧版本)。如果您将鼠标悬停在“输入”元素的文本上,则悬停不起作用。 – thirtydot 2011-03-08 15:24:19

+0

如果你使用一个类,让我们说'theInput',然后使用'theInput:hover'?它会产生相同的结果吗? – Bazzz 2011-03-08 15:25:53

+0

我遇到了悬停在div上的相反问题。在IE9悬停时,只有鼠标悬停在div内的文本上时才会激活。它在Chrome和FF4中运行良好,但不是IE9 - 至少使用我的代码。编辑:好吧,似乎这是因为我的div的背景是'透明'。当我将背景设置为一种颜色时,它会按预期工作。怪异的... – 2011-05-30 04:50:03

IE只支持:悬停在链接上。你必须用js改变风格。

+1

不完全正确,请参阅我的答案。 – 2011-03-08 15:14:42

+3

太棒了。我必须承诺内存,即IE!= IE 6 – Jordan 2011-03-08 15:30:00

这实际上是由以下事实导致IE不能识别非锚:hover伪类(<a>)元素,除非您使用STRICT文档类型:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 

http://jsfiddle.net/durilai/Xb8Bg/1/

+0

即使IE8不评估悬停输入的文本。 – 2011-03-08 15:15:08

+0

我实际上使用IE 9测试版,并且添加STRICT文档类型并没有帮助。 – 2011-03-08 15:17:45

+0

@Jaroslav Jandek - 对,我更新了我的答案。它在jsfiddle中工作,但只是第一次,所以我认为它只是一个错误。 – 2011-03-08 15:18:04

提供高度和输入框的宽度

input { border: 0px; margin:0; padding:0;width:200px;height:25px; } 
+0

这只适用于非常缓慢地移动鼠标的情况。如果快速移动鼠标以覆盖文本,则不会触发悬停。 – 2011-03-08 15:17:16

这似乎是IE汉族拖动悬停事件。在这个例子中,我将悬停改为form:hover input,无论你身在何处都应该触发。但它仍然是越野车。

http://jsfiddle.net/Xb8Bg/74/

在我的测试中我发现,边境触发悬停,然后它允许的工作。“但是,您仍然可以将鼠标快速移动到文本的中心并重现错误。所以这告诉我整体的实现是错误的。

我能想出的最佳解决方法是使用透明边框。这当然受到我刚刚提到的移动鼠标快速错误的影响,但它总比没有好。如果你真的需要0px边框,我怀疑js解决方案可以很容易地设计出来。

input:hover { border: 1px solid transparent; } 

您可以使用javascript来启用该功能。

//css 
input{ 
    border: 0px; 
    margin:0; 
    padding:0; 
} 

input.hover{ 
    background:red; 
} 

//javascript 
$(document).ready(function() { 
    var input = $("input"); 
    input.mouseover(function(e) {   
    $(this).addClass("hover"); 
    }).mouseout(function(e) { 
    $(this).removeClass("hover"); 
    }); 
}); 

这是一个问题,您的DOCTYPE为达斯汀莱恩指出。

使用HTML 5文档类型或其他一些实验。

http://jsfiddle.net/q7Ymj/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> 

这将启用IE