这似乎是一个非常常见的问题,尽管我尝试了使用addClass / removeClass而不是直接CSS操作的建议,并且尝试了mouseleave / mouseout,但两者都会引起问题。我想要的只是一个简单的转换即可更改类!我尝试执行的所有操作前后不一致都会使课程闪烁。我一直试图满足的唯一其他要求是使监听器生活在一个函数中,而不是内联。那是什么使这不可能呢?function highlight(_event){ $(this).addClass("Highlighted");}function unhighlight(_event){ $(this).delay(2000,function(){ $(this).removeClass("Highlighted"); });}$(document).ready(function () { $(".Content").live('mouseenter',highlight); $(".Content").live('mouseout',unhighlight);});JSFiddle of the above编辑添加.stop(true,true)似乎很有帮助。 最佳答案 如果要实时使用,可以使用.toggleClass(),.mouseover()和.mouseout()执行以下操作:$(".content").live("mouseover mouseout", function() { $(this).toggleClass("highlight");});查看demo here更新:我不能离开这个,所以继续弄弄你的例子-评论后,您在其他地方使用函数。所以这是我发现的:不用调用.mouseout()而是使用.mouseleave()-由于某种原因,当鼠标移动时,多次调用.mouseout() get-在鼠标第一次进入对象时甚至会调用它。明白我的意思在这里其次,.delay()此处并未真正正确使用-确实是为了使效果排队-但您真正想要的是添加一个延迟函数(尽管这是您所追求的效果),所以请使用为您拨打电话。.setTimeout() As per the doc's:方法最适合 排队的jQuery之间延迟 效果。因为它是有限的 例如,没有提供一种方法 取消延迟-.delay()不是 替代JavaScript的本机 .delay()函数,可能更多 适用于某些用例。因此,完成的函数将如下所示:function highlight(_event) { $(this).addClass("Highlighted");}function unhighlight(_event) { var obj = $(this); setTimeout(function() { obj.removeClass("Highlighted"); }, 2000);}$(document).ready(function() { $(".Content").live('mouseenter', highlight); $(".Content").live('mouseleave', unhighlight);});参见.setTimeout(),这将向您展示我多次触发demo here事件的含义,因为.mouseout()函数仅在鼠标实际离开时才被调用一次。注意:请使用输入按钮按OK,不要移动鼠标!请参见.mouseleave(),以查看最终版本在此处尽可能接近原始版本。