javascript - jQuery .click Function with If Statement Only Works for the .show() Case -


i'm pretty new whole jquery scene apologise if i'm being dumb i've tried hardest resolve myself.

i using jquery manipulate css ul menu. i've got jquery works 3/4 of it's requirements. jquery finds items in ul children , appends span them. span used house drop down arrow open sub-menu.

clicking sub-menu opens okay , clicking anywhere on page hides sub-menu okay $(document) function i've added, reason, once sub-menu open, second half of if statement in .click function doesn't close menu.

any thoughts? platform wordpress , menu generated wp_nav_menu it's worth.

non-functional part of jquery script second half of if statement after else.

jquery

$(document).ready(function(){ $('div.sub-menu-wrap').parent().append('<span> v </span>'); $('ul.nav-menu li span').hover(function(){ $(this).toggleclass('hover'); })  $('ul.nav-menu li span').click(function() {     if(!$('div.sub-menu-wrap').is(':visible')) {         $('ul.nav-menu li span').parent().addclass('drop');         $('ul.nav-menu li span').siblings('a').addclass('drop');         $('div.sub-menu-wrap').show();     } else {         $('ul.nav-menu li span').parent().removeclass('drop');         $('ul.nav-menu li span').siblings('a').removeclass('drop');         $('div.sub-menu-wrap').hide();     } })  $(document).mouseup(function(e){     var container = $("div.sub-menu-wrap");     if (!container.is(e.target)              && container.has(e.target).length === 0)         {         $('ul.nav-menu li span').parent().removeclass('drop');         $('ul.nav-menu li span').siblings('a').removeclass('drop');         $('div.sub-menu-wrap').hide();         }     }); }); 

now added html.

    <div class="nav-menu-wrap">     <ul class="nav-menu" id="menu-navigation-menu">     <li class="first-item menu-item menu-item-type-post_type menu-item-object-page menu-item-251" id="menu-item-251"></li>     <li class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-261 current_page_item menu-item-has-children menu-item-271" id="menu-item-271">     <div class="sub-menu-wrap" style="display: none;">         <ul class="sub-menu">             <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-441" id="menu-item-441"></li>             <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-461" id="menu-item-461"></li>             <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-451" id="menu-item-451"></li>         </ul>     </div>     <span> v </span>     </li>     <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-241" id="menu-item-241"></li>     <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-211" id="menu-item-211"></li>     <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-201" id="menu-item-201">li>     <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-221" id="menu-item-221"></li>     <li class="last-item menu-item menu-item-type-post_type menu-item-object-page menu-item-231" id="menu-item-231"></li> </ul> </div> 

the problem $(document).mouseup function. it's firing before click event on ul, , hiding submenu. when ul click event, submenu wrapper hidden, , therefore you're ever hitting first condition in if statement.

if change document mouseup this, should work. added main menu wrapper containers ignore mouseup event.

var container = $("div.sub-menu-wrap, div.nav-menu-wrap"); 

Comments

Popular posts from this blog

php - SPIP: From Tag directly to an article -

jquery - isAjaxRequest always return false -

ruby on rails - In a controller spec, how to find a specific tag in the generated view? -