Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7408433
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 29, 20262026-05-29T05:54:55+00:00 2026-05-29T05:54:55+00:00

This seems like a pretty easy one, but I couldn’t solve my issue by

  • 0

This seems like a pretty easy one, but I couldn’t solve my issue by reading the related questions here on SO.. so here’s mine. I have:

<ul class="main-menu">
    <li>Letters</li>
    <li>Numbers</li>
</ul>

<ul class="sub-menu hidden">
    <li>A</li>
    <li>B</li>
    <li>C</li>
</ul>

I want .sub-menu to appear on mouseover of .main-menu, and keep visible while the mouse is over both .main and sub.

$(".main-menu, .sub-menu").hover(
    function(){
        $('.sub-menu').hide().removeClass('hidden').slideDown('fast');
    }, function(){
        $('.sub-menu').slideUp('fast');
    }
);

But mouseout is fired when I mouseout of main-menu, even though I mouseout of it into sub-menu, so the sub-menu is hidden.

Any suggestions? Restructuring the HTML is not an option, though.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-29T05:54:56+00:00Added an answer on May 29, 2026 at 5:54 am

    The following assumes you have a second sub-menu to go with the “Numbers” main-menu item, something like I’ve shown here: http://jsfiddle.net/aY7wW/ – and further assumes that when you said “Restructuring the HTML is not an option” you meant that I couldn’t even suggest adding attributes to associate each sub-menu with its main-menu item. To work within this restriction I’ve used the main-menu li element index to relate to the sub-menu ul element index (obviously this works only if the sub-menus are defined in the same order as the corresponding main-menu items). If you could add some id attributes or something it would simplify the code somewhat, but anyway:

    var timerId,
        $mainMenuItems = $(".main-menu li"),
        $subMenus = $(".sub-menu");
    
    $mainMenuItems.hover(
        function(){
            clearTimeout(timerId);
            $subMenus.slideUp('fast');
            $($subMenus[$mainMenuItems.index(this)]).hide()
                                                    .removeClass('hidden')
                                                    .slideDown('fast');
        }, function(){
            var i = $mainMenuItems.index(this);
            timerId = setTimeout(function(){$($subMenus[i]).slideUp('fast');},500);
        }
    );
    $subMenus.hover(
        function() {
           clearTimeout(timerId);
        },
        function() {
           $(this).slideUp('fast');
        }
    );
    

    The basic idea is to use setTimeout() to delay hiding the sub-menu on mouseout from the main-menu. This gives you time to move the mouse over the sub-menu, and if you do the timeout is cleared so it won’t be hidden. Then when you move the mouse off the sub-menu it is hidden. But allowing for movement of the mouse just between the different main-menu items, on initial hover we also clear any outstanding timeout and hide previously shown sub-menus so that only the correct sub-menu will show. I’ve used a delay of 500ms, but obviously you can set that to whatever feels natural for you.

    Working demo: http://jsfiddle.net/aY7wW/

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

This seems like a pretty softball question, but I always have a hard time
This seems like it should be pretty straight forward, but I'm apparently confused. I
This feels like it should be pretty simple, but not much seems to be
This seems like a simple question, but I can't find it with the Stack
This seems like a silly question but I would really like your comments and
This seems like such a trivial problem, but I can't seem to pin how
This seems like perhaps a naive question, but I got into a discussion with
This seems like an incredibly dumb question to have to ask, but how do
This seems like it should be obvious but I can't figure it out. Suppose
This seems like a very simple and a very common problem. The simplest example

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.