jQuery:暂时禁用悬停...意外的副作用

Posted

技术标签:

【中文标题】jQuery:暂时禁用悬停...意外的副作用【英文标题】:jQuery: temporarily disable hover... unintended side effect 【发布时间】:2012-01-27 19:10:58 【问题描述】:

我遇到了 .hover() 的问题。我想暂时禁用它,我已经这样做了,但它有一个我想摆脱的意外副作用。

以下是我的小提琴:http://jsfiddle.net/sdPVG/7/

我试图在工具提示和下拉菜单打开(topTip 和 topDrop)时禁用悬停。这些 div 在单击红色图标 (topIconNew) 时打开,这会扩大工具提示。不幸的是,工具提示在被点击后会永久加宽。我希望 div 恢复到正常(较窄)状态。我哪里出错了?

任何和所有的帮助表示赞赏。谢谢!

【问题讨论】:

【参考方案1】:

你需要去掉你在展开时设置的宽度。

在您的$(document).click 中,进行以下更改:

$('div.topTip, div.topDrop').hide();

$('div.topTip, div.topDrop').hide().css('width', '');

【讨论】:

【参考方案2】:

在点击处理程序中,您忘记重新启用悬停。

见this fiddle

您还需要在脚本开头存储原始宽度并恢复每个工具提示 div 的值。 JsFiddle 已更新。

请注意,其他答案通过硬编码值“100px”来设置旧宽度。这已经在您的 css 中定义,复制它是一种不好的编程习惯。我的解决方案在开始时读取值并在需要时重新使用它,因此如果您更改 css,则不必更新 js。

【讨论】:

感谢您解决了我在发布此帖子后立即意识到的另一个问题(我正要尝试删除此帖子以解决此问题,然后再重新发布)。感谢您的修复,我现在在任何必要的地方都重新启用了悬停,并为此编辑了我的帖子。但是,如您所见,在单击 topIconNew 并且工具提示已加宽后,即使重新启用悬停,它仍会保持加宽。我该如何解决这个问题以使其恢复到原来的大小? @jstacks 我也解决了这个问题。点击答案中的链接 +1 让我们直接不硬编码宽度值! @jstacks 这没有回答你的问题吗?【参考方案3】:

您使用动画更改了 topTip div 的大小...需要将其设置回原来的大小。将“//在点击外部时隐藏下拉菜单和工具提示”功能更改为:

$(document).click(
    function()
        hoverEnabled = true;
        $('div.topTip').animate(width:100,marginLeft:0,'fast');
        $('div.topTip, div.topDrop').hide();
    
);

【讨论】:

以上是关于jQuery:暂时禁用悬停...意外的副作用的主要内容,如果未能解决你的问题,请参考以下文章

jquery:重置后禁用/启用按钮不起作用

悬停时的Jquery不起作用

jQuery悬停仅在悬停一定时间时才起作用

悬停时背景颜色变化不起作用(jquery)

jQuery 悬停在 WordPress 中不起作用

导航栏的 jQuery 悬停效果不起作用?