我试图在它的 parent 事件上显示一个子导航<ul>
标签。问题是该元素设置为,因此永远不会触发'事件。<li>
mouseover
a
display:block
li
hover
它使用 jQuery 工作,但我不能让它使用普通的 javascript。我将侦听器应用于标题元素,并使用该.matchesSelector
方法确定事件目标是否匹配.nav > li;
我试图在它的 parent 事件上显示一个子导航<ul>
标签。问题是该元素设置为,因此永远不会触发'事件。<li>
mouseover
a
display:block
li
hover
它使用 jQuery 工作,但我不能让它使用普通的 javascript。我将侦听器应用于标题元素,并使用该.matchesSelector
方法确定事件目标是否匹配.nav > li;
没有代码,人们不得不猜测,但我的猜测是您正在使用mouseover
并mouseout
确定悬停。事件冒泡,所以你会从 的后代元素中mouseout
收到,并且错误地(我在这里再次猜测)认为光标已经离开了而不是离开了 . 的后代元素之一。同样,当光标从自身移动到后代元素时,触发 a 。它在 jQuery 中工作(使用,大概?)因为 jQuery 不使用and ,它使用andmouseout
li
li
li
li
li
mouseout
hover
mouseover
mouseout
mouseenter
mouseleave
,更适合这种情况。(并且它在本机没有它们的浏览器上模拟它们;它们最初是 IE-only。)
因此,如果您使用 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 及更高版本(如果您处于标准模式)。
为什么不为所有子元素定义事件处理程序,然后做一个
event.cancelBubble = true; //IE
event.stopPropagation(); //FF, etc