我正在嘲笑一个简单的多级下拉框,并且无法弄清楚如何在悬停时让悬停事件仅触发一次li.当a列表项内的标记悬停时,悬停事件将触发两次.
这是一个演示问题的jsFiddle.我在a标签周围添加了额外的填充,以显示事件如何被触发两次.如果只是填充悬停,事件将触发一次,但是一旦a标记悬停,它将再次触发.
HTML:
<ul class="dropit">
<li><a href="#">Thing 1</a></li>
<li><a href="#">Thing 2</a></li>
<li><a href="#">Thing 3</a>
<ul>
<li><a href="#">Sub-thing 1</a></li>
<li><a href="#">Sub-thing 2</a>
<ul class='sub-menu'>
<li><a href="#">Sub-sub-thing 1</a></li>
<li><a href="#">Sub-sub-thing 2</a></li>
</ul>
</li>
</ul>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
jQuery的:
$(document).ready(function(e) {
$('ul.dropit li').on('mouseover', function(event) {
$target = $(event.currentTarget);
$sub = $target.children('ul').first();
$sub.slideToggle();
}).on('mouseout', function(event) {
$target = $(event.currentTarget);
$target.children('ul').first().slideToggle();
});
});
Run Code Online (Sandbox Code Playgroud)
Tur*_*nip 10
使用mouseenter而mouseleave不是mouseover和mouseout
$(document).ready(function(e) {
$('ul.dropit li').on('mouseenter', function(event) {
$target = $(event.currentTarget);
$sub = $target.children('ul').first();
$sub.slideToggle();
}).on('mouseleave', function(event) {
$target = $(event.currentTarget);
$target.children('ul').first().slideToggle();
});
});?
Run Code Online (Sandbox Code Playgroud)
mouseover 将鼠标悬停在子元素上时会触发.
mouseenter 无论有多少孩子徘徊,只会发射一次.
只是用 .hover()
此外,为防止在重复悬停运动中出现丑陋的幻灯片,请使用:.stop()
$('.dropit li:has("ul")').hover(function() {
$('>ul', this).stop().slideToggle();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5306 次 |
| 最近记录: |