2017-06-06 146 views
0

我有一個很好的響應菜單。但是,當訪問者點擊我的菜單中的項目時,我想要關閉菜單。此時,只有當訪問者點擊'button_menu'時,菜單纔會關閉。如果有人點擊「子菜單按鈕」,菜單必須保持打開狀態。我怎樣才能做到這一點?關閉resonsive菜單

<script> 
(function($) { 
$.fn.menumaker = function(options) { 
var cssmenu = $(this), settings = $.extend({ 
    format: "dropdown", 
    sticky: false 
}, options); 
return this.each(function() { 
    $(this).find(".button_menu").on('click', function(){ 
    $(this).toggleClass('menu-opened'); 
    var mainmenu = $(this).next('ul'); 
    if (mainmenu.hasClass('open')) { 
     mainmenu.slideToggle().removeClass('open'); 
    } 
    else { 
     mainmenu.slideToggle().addClass('open'); 
     if (settings.format === "dropdown") { 
     mainmenu.find('ul').show(); 
     } 
    } 
    }); 
    cssmenu.find('li ul').parent().addClass('has-sub'); 
multiTg = function() { 
    cssmenu.find(".has-sub").prepend('<span class="submenu-button"></span>'); 
    cssmenu.find('.submenu-button').on('click', function() { 
     $(this).toggleClass('submenu-opened'); 
     if ($(this).siblings('ul').hasClass('open')) { 
     $(this).siblings('ul').removeClass('open').slideToggle(); 
     } 
     else { 
     $(this).siblings('ul').addClass('open').slideToggle(); 
     } 
    }); 
    }; 
    if (settings.format === 'multitoggle') multiTg(); 
    else cssmenu.addClass('dropdown'); 
    if (settings.sticky === true) cssmenu.css('position', 'fixed'); 
resizeFix = function() { 
    var mediasize = 1000; 
    if ($(window).width() > mediasize) { 
     cssmenu.find('ul').show(); 
    } 
    if ($(window).width() <= mediasize) { 
     cssmenu.find('ul').hide().removeClass('open'); 
    } 
    }; 
    resizeFix(); 
    return $(window).on('resize', resizeFix); 
}); 
    }; 
})(jQuery); 

(function($){ 
$(document).ready(function(){ 
$("#cssmenu").menumaker({ 
    format: "multitoggle" 
}); 
}); 
})(jQuery); 
</script> 

HTML:

<header> 
      <nav id="cssmenu"> 
       <div class="logo"> 
        <a href="http://www. .com"> 
        <img alt="" src="images/logo.png"></a> </div> 
       <div id="head-mobile"> 
       </div> 
       <div class="button_menu"> 
       </div> 
       <ul id="myTopnav" class="navigation"> 
        <li class="active" data-slide="1"> 
        <a onclick="myFunction()">HOME</a></li> 
        <li data-slide="2"><a onclick="myFunction()">PRODUCTS</a> 
        <ul> 
         <li> 
         <a onclick="window.location.href='http://www.'"> 
         ROTARY STAGES</a></li> 
         <li> 
         <a onclick="window.location.href='http://www.'"> 
         LINEAR STAGES</a></li> 
         <li> 
         <a onclick="window.location.href='http://www.'"> 
         MULTI-DOF STAGES</a></li> 
         <li> 
         <a onclick="window.location.href='http://www.'"> 
         DRIVERS</a></li> 
        </ul> 
        </li> 
        <li data-slide="4"><a onclick="myFunction()">TRADE FAIRS</a></li> 
        <li data-slide="6"><a onclick="myFunction()">COMPANY</a></li> 
        <li data-slide="16"><a onclick="myFunction()">TECHNOLOGY</a></li> 
        <li data-slide="8"><a onclick="myFunction()">CAREERS</a></li> 
        <li data-slide="10"><a onclick="myFunction()">CONTACT</a></li> 
       </ul> 
      </nav> 
     </header> 

回答

0

你可以簡單地裝上單擊事件到ul.menumaker內,並檢查點擊的原始目標是否是一個.submenu-button內,以確定是否關閉:

return this.each(function() { 
 
    $(this).find(".button_menu").on('click', function(){ 
 
    // Your current button event remains the same 
 
    }).next('ul').on('click.checkToClose', function(e) { 
 
     var target = e.originalEvent.target; 
 
     if ($(target).closest('.submenu-button').length === 0) { 
 
      $(this).slideToggle().removeClass('open'); 
 
     } 
 
    }); 
 
    // ... 
 
});

或者,如果你想只爲貼着如果菜單鏈接被點擊,就可以更加簡單:

return this.each(function() { 
 
    // ... 
 
    var mainmenu = $(this).find(".button_menu").next('ul'); 
 
    mainmenu.on('click.checkToClose', 'a', function(e) { 
 
     if ($(this).closest('.submenu-button').length === 0) { 
 
      mainmenu.slideToggle().removeClass('open'); 
 
     } 
 
    }); 
 
    // ... 
 
});