Javascript 切换jquery-问题
我有这个 但是,当鼠标向左或向右拖动时,将停止toogle。 hover()事件没有解决问题 有什么想法吗Javascript 切换jquery-问题,javascript,jquery,Javascript,Jquery,我有这个 但是,当鼠标向左或向右拖动时,将停止toogle。 hover()事件没有解决问题 有什么想法吗 div.fileinputs { position: relative; display: none; } #show { width: 200px; height: 40px; background-color: red; z-index: -2px; position: absolute; } <div id="show
div.fileinputs {
position: relative;
display: none;
}
#show {
width: 200px;
height: 40px;
background-color: red;
z-index: -2px;
position: absolute;
}
<div id="show"></div>
<div class="fileinputs">Visible Panel Div</div>
$('#show').mouseover(function() {
$('.fileinputs').toggle();
});
div.fileinputs{
位置:相对位置;
显示:无;
}
#展示{
宽度:200px;
高度:40px;
背景色:红色;
z指数:-2px;
位置:绝对位置;
}
可视面板分区
$('#show').mouseover(函数(){
$('.fileinputs').toggle();
});
我想这是因为你在节目中把z-index设置为-2。一旦fileInputs div可见,它就会在show上方变为,因此show的mouseover不再响应
如果您注意到,如果您将鼠标从左向右悬停在红色的show div上,但刚好在文本所在位置下方,
fileinputs
div实际上会切换。如果您只想在mouseover上显示元素,然后在mouseout上隐藏它,您还应该使用mouseout()
要定义移除鼠标时所需的行为,请执行以下操作:
$("#show")
.mouseover(function(){
$(".fileinputs").toggle();
})
.mouseout(function(){
$(".fileinputs").toggle();
});
。(因为fileinputs
是一个单独的元素,所以它是不稳定的,并且它不将悬停在上面的元素计算为悬停在show div上)
但您应该使用hover,以便更轻松:
$("#show").hover(function(){
$(".fileinputs").show();
}, function(){
$(".fileinputs").hide();
});
。(由于与上述相同的原因而起伏)
因为您想要的行为是明确的,所以当鼠标在上面时,我们将使用show()
,当鼠标被移除时,我们将使用hide()
顺便说一下,您最好使用delegate()
(对于较旧版本的jQuery)或on()
(对于jQuery 1.7+)绑定事件:
不过,您真的应该使用CSS来实现这一点。您可以将fileinputs
放在show
的内部,并使用子选择器:
#show:hover > .fileinputs {
display: block;
}
。这个元素不会闪烁,因为元素位于附加了悬停声明的元素内部,CSS将其视为仍然悬停在父元素上(因为从技术上讲,悬停的目标位于父元素的边界内)[如果它在边界之外,它仍然可以工作,因为元素仍然是嵌套的]。如果在
fileinputs
div周围添加一个边界,则行为的原因会更清楚
见:
将光标移动到两个div重叠的区域上会触发鼠标悬停事件,显示隐藏的文件输入
div。由于该div现在显示在显示
的顶部,因此光标不再直接位于原始显示
div上。然后,当光标移到div外时,您可以继续移动光标>fileinputs
区域,该移动被视为底层show
div的另一个入口。它再次触发.toggle()
,重新隐藏fileinputs
div
一个快速修复方法是切换到jQuery自定义事件,而不是
mouseover
(尽管在jQuery解释“over”的含义时,您可能会得到一些不稳定的工件)。根据您试图实现的目标,另一个选项是按z索引对两个div重新排序。我不确定我是否理解--您希望div在mouseover上显示,然后在mouseout上隐藏?没错。悬停()事件只有在div不重叠的情况下才能正常工作。您应该将div.fileinputs
放在元素内部,因为否则jQuery认为它是一个新元素+1,但您知道为什么会出现这种情况吗?我认为这会顺利工作@AdamRackis:闻起来又像是元素分离的冲突。我不认为Javasc在将鼠标悬停在子对象上时,在父对象上的悬停事件与CSS的工作方式完全相同。但奇怪的是,在on()
函数中的事件中添加mouseout
,可以使其顺利工作。无法进一步解释…我将对此进行研究。
#show:hover > .fileinputs {
display: block;
}