javascript - how to stop dropdown menu child sliding up when clicked -
i attempting make dropdown menu when clicked stays down also, when clicking anywhere within dropdown area, not slide up. when clicked elsewhere on page should disappear.
i struggling make happen though. can see doing here:
html
<nav id="moo"> <ul> <li>item 1 <i>o</i> <div class="dropdown"> <ul> <li>item 2</li> <li>item 3</li> <li>item 4</li> </ul> </div> </li> <li>item 1 <i>o</i> <div class="dropdown"> <ul> <li>item 7</li> <li>item 8</li> <li>item 9</li> </ul> </div> </li> </ul> </nav>
css
ul { padding: 0px; margin: 0px; } li { display: inline; } nav li { position: relative; } nav { cursor: pointer; font-weight: bold; background-color: red;padding: 5px; } .dropdown { display: none; position: absolute; border:1px solid #ccc; padding: 10px; } .dropdown li { display: block; }
script
$('nav li').click(function () { var $childdropdown = $(this).find('.dropdown'); if ($childdropdown.is(':visible')) { $('.dropdown').slideup(300); } else { $('.dropdown').slideup(300); $childdropdown.slidedown(300); } }); /* gets document hide dropdown */ $(document).click(function(){ $(".dropdown").hide(); }); /* clicks within dropdown won't make past dropdown */ $("nav").click(function(e){ e.stoppropagation(); });
here fiddle version:
you need work event target property , traverse parents find out element has triggered event. if it's element inside ".dropdown" class, no sliding-up should applied, otherwise close dropdown.
$('nav > ul > li').click(function (e) { var $childdropdown = $(this).find('.dropdown'); if ($childdropdown.is(':visible')) { var target = $(e.target); if (!$(target).parents(".dropdown").length) { $('.dropdown').slideup(300); }
} ...
notice changed selection in $('nav > ul > li'), apply li elements of upper level.
Comments
Post a Comment