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
Post a Comment