使用 jQuery 取消 CSS 悬停行为

Posted

技术标签:

【中文标题】使用 jQuery 取消 CSS 悬停行为【英文标题】:Cancel CSS hover behavior with jQuery 【发布时间】:2013-05-16 08:36:02 【问题描述】:

我工作的网站有一个导航菜单(一个 CSS 格式的无序列表),其中包含一些类别的子菜单(子无序列表)。

此 CSS 规则隐藏子菜单无序列表:

.main-navigation ul ul 
    display:none;

当访问者将光标悬停在***菜单链接上时,此 CSS 规则会显示子菜单无序列表:

.main-navigation ul li:hover > ul ;
    display:block;

这是为那些(可能不存在)在浏览器中禁用 javascript 的用户完成的。

现在我正在使用 jQuery 为导航菜单增添趣味,我需要做的第一件事是禁用由 CSS 决定的悬停行为。出于某种原因,我很难这样做,并且可以使用一些帮助。这是我尝试过的:

jQuery(document).ready(function($) 
     $('.main-navigation ul li:hover > ul').css('display', 'none');

);

不走运,CSS 仍然控制行为,并且子菜单在悬停时弹出,就好像没有 jQuery 存在一样。这意味着,我没有正确地做到这一点。

如果有人向我解释应该如何做,我将不胜感激!

【问题讨论】:

【参考方案1】:

试试这个:

DEMO

jQuery(document).ready(function($) 
     $('.main-navigation ul li').on('mouseover',function()
        $('.main-navigation ul li:hover > ul').css('display', 'none');
     );
);

【讨论】:

完美,@roasted!像魅力一样工作。谢谢! 这个 sn-p @roasted 的一切都很完美,只有一个例外。该脚本不考虑如果用户将鼠标从链接上移开会发生什么。请你再帮忙一点好吗?我将不胜感激! 我不了解您的问题,您能否提供示例或详细说明如何重现您的问题? 我看到您在控制台中有一些错误。首先通过使用 jquery 迁移或升级插件或降级 jquery 版本来迁移代码来修复这些错误。就是说,您的菜单行为很奇怪,恐怕我没有时间调试您的所有站点。您应该通过打开一个新问题来发布您的问题,其中包括您用于设置菜单和子菜单的所有代码。基本上,您似乎想要的行为菜单作为互联网上的大量示例,您应该能够找到适合您需求的一种。【参考方案2】:

您能做的最好的事情就是从父类中删除 main-navigation 类。否则,您将无法通过 JavaScript 操作伪类的样式。

【讨论】:

你的意思是,像这样,@techfoobar: $('.main-navigation ul').removeClass('.main-navigation'); - 我说的对吗? 移除类,你将失去所有附加的 css 样式规则,甚至一些你想保留的规则 是的,出于某种神秘的原因,删除该类并没有取消悬停行为,@roasted。 (我怀疑我做错了,不知何故。)仍然 - 你的解决方案是最好的。 正如烤的所说,删除类也会删除其他样式,可能不是你想要的。

以上是关于使用 jQuery 取消 CSS 悬停行为的主要内容,如果未能解决你的问题,请参考以下文章

CSS下拉菜单打开:悬停

如何修复 CSS“过渡”取消悬停元素?

javascript jQuery悬停和取消悬停

有没有办法在它发生时取消 jQuery 的悬停事件?

使用 jQuery 在 iOS 上对单击/悬停行为感到困惑

取消悬停时的 CSS3 动画