【问题标题】:Force mouseleave on CSS menu after submenu click单击子菜单后在 CSS 菜单上强制鼠标离开
【发布时间】:2013-12-27 04:17:47
【问题描述】:

正如你在这里看到的http://www.revistatres.com.br/daniel/trecinco 我有一个带有下拉子菜单的 CSS 菜单。

为了强制子菜单在被点击后消失,我使用了以下方法:

    $("#menu ul li ul").click(function(){ 
        $(this).css("visibility", "hidden");    
    });     

为了让子菜单在菜单再次悬停后重新出现,我使用了以下内容:

    $("#menu ul li").hover(function(){
        $(this).children().css("visibility", "visible");    
    });

我现在的问题是,即使在子菜单消失后,顶部菜单仍保持“选中”状态,就好像 CSS 认为它仍然悬停一样,因此,在我移动鼠标指针之前,背景颜色仍然较暗。

在 $("#menu ul li ul").click 事件中,我尝试了这些选项来强制 CSS 意识到指针不再位于 "#menu ul li" 上方:

            $("#menu ul li").trigger("mouseleave");

            $("#menu ul li").css("removeClass","hover");

还有很多其他的东西,但都没有奏效。

有什么想法吗?

谢谢。

【问题讨论】:

  • 您的链接打不开,请解决您的问题
  • 有一个额外的“w”,刚刚修复,谢谢。
  • @BuddhistBeast Chrome。我刚刚在 IE 上尝试过,同样的情况发生了。
  • 它确实发生在移动 safari 上,更具体地说是 iPad。
  • 这些问题需要一个小提琴。

标签: javascript jquery css hover mouseleave


【解决方案1】:

代替visibility,你可以试试display属性。

Working Demo

jQuery

 $("#menu ul li").hover(function(){
        $(this).children().css("display", "block");    
    });

$("#menu ul li ul").click(function(){ 
        $(this).css("display", "none");    
    });  

【讨论】:

  • 这行得通,谢谢!我应该意识到我应该使用 display 代替,因为子菜单在悬停标题时使用 display 显示。非常感谢!
  • 我尝试投票,但我不能,我正在寻找一种方法将其标记为已解决,请问如何将其标记为答案?我真的很抱歉问这个......
【解决方案2】:

您可以通过 mouseup 事件来执行此操作,因为用户访问mouseup 的唯一时间是在他们单击链接之后。

$( '#header' ).mouseup(function() {
  //reset header
});

我想这正是你想要的,试试看:

$("#menu ul li").mouseup(function(){
    $("#menu ul").css('background-color','#ccc');
});

【讨论】:

  • “重置标题”是否意味着重新加载 div“标题”的内容?如果是这样,我一直在使用 jquery 的 .load 来避免在用户单击链接时重新加载整个页面。这样,我只 .load #header 和 #footer 一次,我知道通过在每次点击时重新加载 #header 可以解决问题,但这会破坏我使用 .load 的目的。如果我误会了你,我很抱歉,如果我误会了,请你介意进一步解释吗?谢谢
  • 不,只需反转您在用户悬停时所做的任何更改。例如。如果当他们悬停时,菜单选项的背景颜色从#ccc 更改为#999,则在 mouseup 函数中将背景颜色从#999 更改为#ccc。
  • 检查更新的第二个代码块。我不确定当前两个答案中的哪一个可以解决您的问题,但肯定会听取 Surjith 的建议。使用显示比可见性更普遍。
  • 我明白你的意思了,我已经尝试在点击事件中反转它,这应该几乎相同。但是,我遇到了另一个问题,这应该很简单。最初,“#menu ul li”没有设置背景,因为当它悬停时有#menu ul li:hover { background: #555;颜色:#fff;我试过 css("background","blue");并且标题确实将其背景更改为蓝色,但是如何删除背景?我试过 css("background","");但它不起作用。
猜你喜欢
  • 1970-01-01
  • 2016-03-15
  • 2019-12-09
  • 1970-01-01
  • 2016-04-22
  • 2014-04-27
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
相关资源
最近更新 更多