[英]jQuery avoid toggle div from hiding when on a certain area
I have some jquery that does a link menu hover effect. 我有一些jQuery,它执行链接菜单悬停效果。
My problem is that when I move the mouse to go towards the hovered (#test) div, the div hides so I never get to be able to click on the links below. 我的问题是,当我将鼠标移到悬停的(#test)div上时,该div会隐藏,因此我永远无法单击下面的链接。
Here's the code: 这是代码:
//HTML
<li id="hoverer" class="tab-link" data-tab="ideas_by_stage" style="position:relative">Hover here...</li>
<div id="test" style="display:none;position:absolute;z-index:999999;border:1px solid grey;width:200px;padding:4px 10px;left:170px;background-color:white;">
<div class="btn"><a href="">Option 1</a></div>
<div class="btn">Option 2</div>
<div class="btn">Option 3</div>
<div class="btn">Option 4</div>
</div>
//jQuery
$( "#hoverer" ).hover(function() {
$('#test').toggle();
});
How can I fix this problem? 我该如何解决这个问题?
$( "#hoverer" ).hover(function() { $('#test').fadeIn(); }); $( "#test" ).hover(function() { $(this).fadeIn(); }, function() { $(this).fadeOut(); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <li id="hoverer" class="tab-link" data-tab="ideas_by_stage" style="position:relative">Hover here...</li> <div id="test" style="display:none;position:absolute;z-index:999999;border:1px solid grey;width:200px;padding:4px 10px;left:170px;background-color:white;"> <div class="btn"><a href="">Option 1</a></div> <div class="btn">Option 2</div> <div class="btn">Option 3</div> <div class="btn">Option 4</div> </div>
Your code work fine, if you move in red border can click on links , see this : 您的代码工作正常,如果您以红色边框移动可以单击链接,请参见:
$( "#hoverer" ).hover(function() { $('#test').toggle(); })
li { border: 1px solid red; }
<li id="hoverer" class="tab-link" data-tab="ideas_by_stage" style="position:relative">Hover here... <div id="test" style="display:none;position:absolute;z-index:999999;border:1px solid grey;width:200px;padding:4px 10px;left:170px;background-color:white;"> <div class="btn"><a href="">Option 1</a></div> <div class="btn">Option 2</div> <div class="btn">Option 3</div> <div class="btn">Option 4</div> </div> </li> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
but best way is use click event ,See below Example : 但最好的方法是使用click事件,请参见下面的示例:
$(document).ready(function() { $("#hoverer").on("click",function(){ $("#test").toggle(500); }) })
<li id="hoverer" class="tab-link" data-tab="ideas_by_stage" style="position:relative">Click For Show / Hidden </li> <div id="test" style="display:none;position:absolute;z-index:999999;border:1px solid grey;width:200px;padding:4px 10px;left:170px;background-color:white;"> <div class="btn"><a href="">Option 1</a></div> <div class="btn">Option 2</div> <div class="btn">Option 3</div> <div class="btn">Option 4</div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
You may use a different approach: 您可以使用其他方法:
Adjust the dimensions of hoverer and test element so that this approach can work (ie: if you leave the div but enter in the li area you get two consecutive events: hide + show). 调整悬停器和测试元素的尺寸,以便此方法可以起作用(即:如果离开div但在li区域中输入,则会得到两个连续的事件:hide + show)。
The snippet: 片段:
$( "#hoverer" ).on('mouseenter', function(e) { $('#test').show(); }); $('#test').on('mouseleave', function(e) { $('#test').hide(); });
#hoverer { background-color: lightblue; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <li id="hoverer" class="tab-link" data-tab="ideas_by_stage" style="position:relative">Hover here...</li> <div id="test" style="display:none;position:absolute;z-index:999999;border:1px solid grey;width:200px;padding:4px 10px;left:170px;background-color:white;"> <div class="btn"><a href="">Option 1</a></div> <div class="btn">Option 2</div> <div class="btn">Option 3</div> <div class="btn">Option 4</div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.