JQuery和hover函数的奇怪行为
我正在页面上使用class="box"
所有DIV使用hover效果:
Javascript :
JQ(".box").hover(function() { JQ(this).nextAll(".tooltip:first").css('visibility','visible'); }); JQ(".box").mouseleave(function(event) { JQ(this).nextAll(".tooltip:first").css('visibility','hidden'); });
它在Firefox和Chrome中运行良好,但在IE9和Opera中,当鼠标在.box DIV的边界内移动时, .tooltip
div会消失并重新出现。 为什么为DIV的每个像素调用hoverfunction的任何想法?
你可以在这里看到一个工作版本
当你只将一个函数传递给.hover()
,当鼠标进入和离开时都会调用该函数。 因此,您在进入和离开时都可以看到它与您的mouseleave处理程序冲突。
你可以这样做:
JQ(".box").hover(function() { JQ(this).nextAll(".tooltip:first").css('visibility','visible'); }, function() { JQ(this).nextAll(".tooltip:first").css('visibility','hidden'); });
或者,多一点DRY(少重复的代码):
JQ.fn.nextTip = function(vis) { return this.nextAll(".tooltip:first").css('visibility', vis); } JQ(".box").hover(function() { JQ(this).nextTip('visible'); }, function() { JQ(this).nextTip('hidden'); });
工作演示: http : //jsfiddle.net/jfriend00/DkgVg/
你应该尝试用以下方法替换hover
部分:
JQ(".box").mouseenter(function() { JQ(this).nextAll(".tooltip:first").css('visibility','visible'); });
或者保持hover
并执行:
JQ(".box").hover(function() { JQ(this).nextAll(".tooltip:first").css('visibility','visible'); }, function(){ JQ(this).nextAll(".tooltip:first").css('visibility','hidden'); });
只需停止执行此jQuery对象的事件函数即可
JQ(".box").hover(function() { JQ(this).nextAll(".tooltip:first").stop(true,true).css('visibility','visible'); }, function(){ JQ(this).nextAll(".tooltip:first").stop(true,true).css('visibility','hidden'); });