'李'mouseover事件被child'a'元素显示块
'li' mouseover event being prevented by child 'a' element display block
我正在尝试在它的父<li>
的mouseover
事件上显示子导航<ul>
标记。问题是a
元素被设置为display:block
,因此li
的hover
事件永远不会被激发。
它使用jQuery工作,但我无法让它使用纯javascript。我将侦听器应用于header元素,并使用.matchesSelector
方法来确定事件目标是否与.nav > li;
匹配
为什么不为所有子元素定义事件处理程序,然后执行
event.cancelBubble = true; //IE
event.stopPropagation(); //FF, etc
如果没有代码,必须猜测,但我的猜测是,您使用mouseover
和mouseout
来确定悬停。mouseout
事件冒泡,因此您将从li
的子元素接收mouseout
,并错误地(我在这里再次猜测)认为光标已离开li
,而不是离开了li
的子元素之一。类似地,当光标从li
本身移动到子元素时,li
触发mouseout
。它在jQuery中工作(可能使用hover
?),因为jQuery不使用mouseover
和mouseout
,而是使用更适合此场景的mouseenter
和mouseleave
。(它在本机没有它们的浏览器上模拟它们;它们最初只是IE。)
因此,如果您使用的是jQuery,显然,只需使用hover
即可。如果没有,或者没有使用库,或者使用的库没有为您模拟mouseenter
和mouseleave
,则需要检查mouseout
操作来自哪个元素,并忽略它,除非它是li
本身。
如果子导航ul
不能覆盖显示它的li
,那么您可以考虑仅使用CSS的解决方案。例如,具有以下结构:
<ul class="mainnav"><!-- Main nav -->
<li><!-- Nav item 1 -->
Nav Text 1
<ul><!-- Menu for nav item 1 -->
...
</ul>
</li>
<li><!-- Nav item 2 -->
Nav Text 2
<ul><!-- Menu for nav item 2 -->
...
</ul>
</li>
</ul>
这个CSS可以做到这一点(为了定位,你可能想要更多,但这将完成显示/隐藏部分):
ul.mainnav > li > ul {
display: none;
}
ul.mainnav > li:hover > ul {
display: none;
}
这在IE6上不起作用;它与IE7及更高版本一样有效(如果您处于标准模式)。
- 在JavaScript中,如何修复元素显示和变量创建之间的初始差异
- 使用漂亮的照片点击另一个元素显示图像
- 我将如何在 HTML 中将数组中的所有元素显示为可点击的对象
- 使元素显示在最小屏幕大小上
- 更好的做法是通过CSS类或直接(通过DOM)修改HTML元素显示
- 如何在YouTube视频前制作元素显示
- 使隐藏元素显示 X 秒
- 如果元素显示:无;在媒体查询中,它们是否仍然加载
- 无法为每个元素显示高图
- 如何使用 jQuery 逐个元素显示
- 使用 jQuery 画布元素显示 Hiddin Div
- '李'mouseover事件被child'a'元素显示块
- JQuery元素显示/隐藏和控制流
- D3在工具提示上将内部列表的元素显示为不同的行
- AngularJS-动态创建<text区域>使用ngSanitize不会't显示(其他元素显示)
- 如何根据单击的元素的位置使元素显示在右侧或左侧
- 响应元素显示:无;在移动宽度,然后通过javascript按钮返回,但显示的链接断开:block;
- 当我再次单击时,它显示none,高度回到0px,但里面的元素显示,不显示none或离开页面
- 将一个元素显示在另一个元素的顶部,并在其上禁用鼠标悬停事件
- reactjs:为什么在render中定义的一些dom元素显示两次