2016-07-06 8 views
0

メガメニューを表示するこのコードがあります。このメニューのいくつかのインスタンスを作成して、Webページのいくつかのページで使用できるようにしたかったのです。私は、JSファイルにコードを何度も貼り付け、クラスの名前を変更してみました。その後、CSSで、私は同じファイル名を貼り付けました。 同じページの同じメニューのインスタンスが複数あるので、コードが機能しているようです。しかし、今は低解像度ではメニューを1つ展開するとすべてのメニューが展開されます。JQuery Megamenuの問題:クリックするとすべてのインスタンスが展開されます

このメガメニューのすべてのインスタンスをどのように分離できますか?どんな助けもありがとう。変更したファイルのコードを追加しています。あなたが見ることができるように、私はこれの5つのインスタンスを必要のある5つのカテゴリーがあり

/*global $ */ 
 
$(document).ready(function() { 
 

 
    "use strict"; 
 

 
    $('.menu-autos > ul > li:has(> ul)').addClass('menu-dropdown-icon'); 
 
    //Checks if li has sub (ul) and adds class for toggle icon - just an UI 
 

 

 
    $('.menu-autos > ul > li > ul:not(:has(ul))').addClass('normal-sub'); 
 
    //Checks if drodown menu's li elements have anothere level (ul), if not the dropdown is shown as regular dropdown, not a mega menu (thanks Luka Kladaric) 
 

 
    $(".menu-autos > ul").before("<a href=\"#\" class=\"menu-mobile\">Navigation</a>"); 
 

 
    //Adds menu-mobile class (for mobile toggle menu) before the normal menu 
 
    //Mobile menu is hidden if width is more then 959px, but normal menu is displayed 
 
    //Normal menu is hidden if width is below 959px, and jquery adds mobile menu 
 
    //Done this way so it can be used with wordpress without any trouble 
 

 
    $(".menu-autos > ul > li").hover(function (e) { 
 
     if ($(window).width() > 767) { 
 
      $(this).children("ul").stop(true, false).fadeToggle(150); 
 
      e.preventDefault(); 
 
     } 
 
    }); 
 
    //If width is more than 943px dropdowns are displayed on hover 
 

 
    $(".menu-autos > ul > li").click(function() { 
 
     if ($(window).width() <= 767) { 
 
      $(this).children("ul").fadeToggle(150); 
 
     } 
 
    }); 
 
    //If width is less or equal to 943px dropdowns are displayed on click (thanks Aman Jain from stackoverflow) 
 

 
    $(".menu-mobile").click(function (e) { 
 
     $(".menu-autos > ul").toggleClass('show-on-mobile'); 
 
     e.preventDefault(); 
 
    }); 
 
    //when clicked on mobile-menu, normal menu is shown as a list, classic rwd menu story (thanks mwl from stackoverflow) 
 

 
}); 
 

 

 
/* ============================================================= mobiles ====================================== */ 
 

 
$(document).ready(function() { 
 

 
    "use strict"; 
 

 
    $('.menu-phones > ul > li:has(> ul)').addClass('menu-dropdown-icon'); 
 
    //Checks if li has sub (ul) and adds class for toggle icon - just an UI 
 

 

 
    $('.menu-phones > ul > li > ul:not(:has(ul))').addClass('normal-sub'); 
 
    //Checks if drodown menu's li elements have anothere level (ul), if not the dropdown is shown as regular dropdown, not a mega menu 
 
\t 
 
    $(".menu-phones > ul").before("<a href=\"#\" class=\"menu-mobile\">Navigation</a>"); 
 

 
    //Adds menu-mobile class (for mobile toggle menu) before the normal menu 
 
    //Mobile menu is hidden if width is more then 959px, but normal menu is displayed 
 
    //Normal menu is hidden if width is below 959px, and jquery adds mobile menu 
 
    //Done this way so it can be used with wordpress without any trouble 
 

 
    $(".menu-phones > ul > li").hover(function (e) { 
 
     if ($(window).width() > 767) { 
 
      $(this).children("ul").stop(true, false).fadeToggle(150); 
 
      e.preventDefault(); 
 
     } 
 
    }); 
 
    //If width is more than 943px dropdowns are displayed on hover 
 

 
    $(".menu-phones > ul > li").click(function() { 
 
     if ($(window).width() <= 767) { 
 
      $(this).children("ul").fadeToggle(150); 
 
     } 
 
    }); 
 
    //If width is less or equal to 943px dropdowns are displayed on click (thanks Aman Jain from stackoverflow) 
 

 
    $(".menu-mobile").click(function (e) { 
 
     $(".menu-phones > ul").toggleClass('show-on-mobile'); 
 
     e.preventDefault(); 
 
    }); 
 
    //when clicked on mobile-menu, normal menu is shown as a list, classic rwd menu story (thanks mwl from stackoverflow) 
 

 
}); 
 

 

 
/* ============================================================= computing ====================================== */ 
 

 
$(document).ready(function() { 
 

 
    "use strict"; 
 

 
    $('.menu-computing > ul > li:has(> ul)').addClass('menu-dropdown-icon'); 
 
    //Checks if li has sub (ul) and adds class for toggle icon - just an UI 
 

 

 
    $('.menu-computing > ul > li > ul:not(:has(ul))').addClass('normal-sub'); 
 
    //Checks if drodown menu's li elements have anothere level (ul), if not the dropdown is shown as regular dropdown, not a mega menu (thanks Luka Kladaric) 
 

 
    $(".menu-computing > ul").before("<a href=\"#\" class=\"menu-mobile\">Navigation</a>"); 
 

 
    //Adds menu-mobile class (for mobile toggle menu) before the normal menu 
 
    //Mobile menu is hidden if width is more then 959px, but normal menu is displayed 
 
    //Normal menu is hidden if width is below 959px, and jquery adds mobile menu 
 
    //Done this way so it can be used with wordpress without any trouble 
 

 
    $(".menu-computing > ul > li").hover(function (e) { 
 
     if ($(window).width() > 767) { 
 
      $(this).children("ul").stop(true, false).fadeToggle(150); 
 
      e.preventDefault(); 
 
     } 
 
    }); 
 
    //If width is more than 943px dropdowns are displayed on hover 
 

 
    $(".menu-computing > ul > li").click(function() { 
 
     if ($(window).width() <= 767) { 
 
      $(this).children("ul").fadeToggle(150); 
 
     } 
 
    }); 
 
    //If width is less or equal to 943px dropdowns are displayed on click (thanks Aman Jain from stackoverflow) 
 

 
    $(".menu-mobile").click(function (e) { 
 
     $(".menu-computing > ul").toggleClass('show-on-mobile'); 
 
     e.preventDefault(); 
 
    }); 
 
    //when clicked on mobile-menu, normal menu is shown as a list, classic rwd menu story (thanks mwl from stackoverflow) 
 

 
});// JavaScript Document 
 

 

 

 

 
/* ============================================================= electronics ====================================== */ 
 

 
$(document).ready(function() { 
 

 
    "use strict"; 
 

 
    $('.menu-electronics > ul > li:has(> ul)').addClass('menu-dropdown-icon'); 
 
    //Checks if li has sub (ul) and adds class for toggle icon - just an UI 
 

 

 
    $('.menu-electronics > ul > li > ul:not(:has(ul))').addClass('normal-sub'); 
 
    //Checks if drodown menu's li elements have anothere level (ul), if not the dropdown is shown as regular dropdown, not a mega menu (thanks Luka Kladaric) 
 

 
    $(".menu-electronics > ul").before("<a href=\"#\" class=\"menu-mobile\">Navigation</a>"); 
 

 
    //Adds menu-mobile class (for mobile toggle menu) before the normal menu 
 
    //Mobile menu is hidden if width is more then 959px, but normal menu is displayed 
 
    //Normal menu is hidden if width is below 959px, and jquery adds mobile menu 
 
    //Done this way so it can be used with wordpress without any trouble 
 

 
    $(".menu-electronics > ul > li").hover(function (e) { 
 
     if ($(window).width() > 767) { 
 
      $(this).children("ul").stop(true, false).fadeToggle(150); 
 
      e.preventDefault(); 
 
     } 
 
    }); 
 
    //If width is more than 943px dropdowns are displayed on hover 
 

 
    $(".menu-electronics > ul > li").click(function() { 
 
     if ($(window).width() <= 767) { 
 
      $(this).children("ul").fadeToggle(150); 
 
     } 
 
    }); 
 
    //If width is less or equal to 943px dropdowns are displayed on click (thanks Aman Jain from stackoverflow) 
 

 
    $(".menu-mobile").click(function (e) { 
 
     $(".menu-electronics > ul").toggleClass('show-on-mobile'); 
 
     e.preventDefault(); 
 
    }); 
 
    //when clicked on mobile-menu, normal menu is shown as a list, classic rwd menu story (thanks mwl from stackoverflow) 
 

 
});// JavaScript Document 
 

 

 

 

 
/* ============================================================= business ====================================== */ 
 

 
$(document).ready(function() { 
 

 
    "use strict"; 
 

 
    $('.menu-business > ul > li:has(> ul)').addClass('menu-dropdown-icon'); 
 
    //Checks if li has sub (ul) and adds class for toggle icon - just an UI 
 

 

 
    $('.menu-business > ul > li > ul:not(:has(ul))').addClass('normal-sub'); 
 
    //Checks if drodown menu's li elements have anothere level (ul), if not the dropdown is shown as regular dropdown, not a mega menu (thanks Luka Kladaric) 
 

 
    $(".menu-business > ul").before("<a href=\"#\" class=\"menu-mobile\">Navigation</a>"); 
 

 
    //Adds menu-mobile class (for mobile toggle menu) before the normal menu 
 
    //Mobile menu is hidden if width is more then 959px, but normal menu is displayed 
 
    //Normal menu is hidden if width is below 959px, and jquery adds mobile menu 
 
    //Done this way so it can be used with wordpress without any trouble 
 

 
    $(".menu-business > ul > li").hover(function (e) { 
 
     if ($(window).width() > 767) { 
 
      $(this).children("ul").stop(true, false).fadeToggle(150); 
 
      e.preventDefault(); 
 
     } 
 
    }); 
 
    //If width is more than 943px dropdowns are displayed on hover 
 

 
    $(".menu-business > ul > li").click(function() { 
 
     if ($(window).width() <= 767) { 
 
      $(this).children("ul").fadeToggle(150); 
 
     } 
 
    }); 
 
    //If width is less or equal to 943px dropdowns are displayed on click (thanks Aman Jain from stackoverflow) 
 

 
    $(".menu-mobile").click(function (e) { 
 
     $(".menu-business > ul").toggleClass('show-on-mobile'); 
 
     e.preventDefault(); 
 
    }); 
 
    //when clicked on mobile-menu, normal menu is shown as a list, classic rwd menu story (thanks mwl from stackoverflow) 
 

 
});// JavaScript Document
* { 
 
    box-sizing: border-box; 
 
} 
 

 
a { 
 
    color: #333; 
 
} 
 

 
.description { 
 
    position: absolute; 
 
    top: 50%; 
 
    left: 50%; 
 
    -webkit-transform: translateY(-50%); 
 
    -ms-transform: translateY(-50%); 
 
    transform: translateY(-50%); 
 
    -webkit-transform: translateX(-50%); 
 
    -ms-transform: translateX(-50%); 
 
    transform: translateX(-50%); 
 
} 
 

 

 
/* –––––––––––––––––––––––––––––––––––––––––––––––––– 
 
megamenu.js STYLE STARTS HERE 
 
–––––––––––––––––––––––––––––––––––––––––––––––––– */ 
 

 

 
/* –––––––––––––––––––––––––––––––––––––––––––––––––– 
 
Screen style's 
 
–––––––––––––––––––––––––––––––––––––––––––––––––– */ 
 

 
.menu-container { 
 
    width: 100%; 
 
    margin: 0 auto; 
 
    background: #fff; 
 
} 
 

 
.menu-mobile { 
 
    display: none; 
 
    padding: 20px; 
 
} 
 

 
.menu-mobile:after { 
 
    content: "+"; 
 
    font-family: "Ionicons"; 
 
    font-size: 2.5rem; 
 
    padding: 0; 
 
    float: right; 
 
    position: relative; 
 
    top: 50%; 
 
    -webkit-transform: translateY(-25%); 
 
    -ms-transform: translateY(-25%); 
 
    transform: translateY(-25%); 
 
} 
 

 
.menu-dropdown-icon:before { 
 
    content: "+"; 
 
    font-family: "Ionicons"; 
 
    display: none; 
 
    cursor: pointer; 
 
    float: right; 
 
    padding: 1.5em 2em; 
 
    background: #fff; 
 
    color: #333; 
 
} 
 

 
.menu-autos > ul, .menu-phones > ul, .menu-electronics > ul, .menu-business > ul, .menu-computing > ul { 
 
    margin: 0 auto; 
 
    width: 100%; 
 
    list-style: none; 
 
    padding: 0; 
 
    position: relative; 
 
    /* IF .menu position=relative -> ul = container width, ELSE ul = 100% width */ 
 
    box-sizing: border-box; 
 
} 
 

 
.menu-autos > ul:before, 
 
.menu-autos > ul:after, .menu-phones > ul:before, 
 
.menu-phones > ul:after, .menu-electronics > ul:before, 
 
.menu-electronics > ul:after, .menu-business > ul:before, 
 
.menu-business > ul:after, .menu-computing > ul:before, 
 
.menu-computing > ul:after { 
 
    content: ""; 
 
    display: table; 
 
} 
 

 
.menu-autos > ul:after, .menu-phones > ul:after, .menu-electronics > ul:after, .menu-business > ul:after, .menu-computing > ul:after { 
 
    clear: both; 
 
} 
 

 
.menu-autos > ul > li, .menu-phones > ul > li, .menu-electronics > ul > li, .menu-business > ul > li, .menu-computing > ul > li { 
 
    float: left; 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 

 
.menu-autos > ul > li a, .menu-phones > ul > li a, .menu-business > ul > li a, .menu-electronics > ul > li a, .menu-computing > ul > li a { 
 
    text-decoration: none; 
 
    padding: 1.5em 1.25em; 
 
    display: block; 
 
\t 
 
} 
 

 
.menu-autos > ul > li:hover, .menu-phones > ul > li:hover, .menu-business > ul > li:hover, .menu-electronics > ul > li:hover, .menu-computing > ul > li:hover { 
 
    border:1px solid #f0f0f0; 
 
} 
 

 
.menu-autos > ul > li > ul, .menu-phones > ul > li > ul, .menu-electronics > ul > li > ul, .menu-business > ul > li > ul, .menu-computing> ul > li > ul { 
 
    display: none; 
 
    width: 100%; 
 
    background: #fff; 
 
    padding: 20px; 
 
    position: absolute; 
 
    z-index: 99; 
 
    left: 0; 
 
    margin: 0; 
 
    list-style: none; 
 
    box-sizing: border-box; 
 
} 
 

 
.menu-autos > ul > li > ul:before, 
 
.menu-autos > ul > li > ul:after, .menu-phones > ul > li > ul:before, 
 
.menu-phones > ul > li > ul:after, .menu-electronics > ul > li > ul:before, 
 
.menu-electronics > ul > li > ul:after, .menu-business > ul > li > ul:before, 
 
.menu-business > ul > li > ul:after, .menu-computing > ul > li > ul:before, 
 
.menu-computing > ul > li > ul:after{ 
 
    content: ""; 
 
    display: table; 
 
} 
 

 
.menu-autos > ul > li > ul:after, .menu-phones > ul > li > ul:after, .menu-electronics > ul > li > ul:after, .menu-business > ul > li > ul:after, .menu-computing > ul > li > ul:after { 
 
    clear: both; 
 
} 
 

 
.menu-autos > ul > li > ul > li, .menu-phones > ul > li > ul > li , .menu-electronics > ul > li > ul > li , .menu-business > ul > li > ul > li, .menu-computing > ul > li > ul > li { 
 
    margin: 0; 
 
    padding-bottom: 0; 
 
    list-style: none; 
 
    width: 25%; 
 
    background: none; 
 
    float: left; 
 
} 
 

 
.menu-autos > ul > li > ul > li a, .menu-phones > ul > li > ul > li a , .menu-electronics > ul > li > ul > li a , .menu-business > ul > li > ul > li a, .menu-computing > ul > li > ul > li a { 
 
    color: #777; 
 
    padding: .2em 0; 
 
    width: 95%; 
 
    display: block; 
 
    border-bottom: 1px solid #ccc; 
 
} 
 

 
.menu-autos > ul > li > ul > li > ul, .menu-phones > ul > li > ul > li > ul, .menu-electronics > ul > li > ul > li > ul, .menu-business > ul > li > ul > li > ul, .menu-computing > ul > li > ul > li > ul { 
 
    display: block; 
 
    padding: 0; 
 
    margin: 10px 0 0; 
 
    list-style: none; 
 
    box-sizing: border-box; 
 
} 
 

 
.menu-autos > ul > li > ul > li > ul:before, 
 
.menu-autos > ul > li > ul > li > ul:after, .menu-phones > ul > li > ul > li > ul:before, 
 
.menu-phones > ul > li > ul > li > ul:after, .menu-electronics > ul > li > ul > li > ul:before, 
 
.menu-electronics > ul > li > ul > li > ul:after, .menu-business > ul > li > ul > li > ul:before, 
 
.menu-business > ul > li > ul > li > ul:after, .menu-computing > ul > li > ul > li > ul:before, 
 
.menu-computing > ul > li > ul > li > ul:after { 
 
    content: ""; 
 
    display: table; 
 
} 
 

 
.menu-autos > ul > li > ul > li > ul:after, .menu-phones > ul > li > ul > li > ul:after, .menu-electronics > ul > li > ul > li > ul:after, .menu-business > ul > li > ul > li > ul:after, .menu-computing > ul > li > ul > li > ul:after { 
 
    clear: both; 
 
} 
 

 
.menu-autos > ul > li > ul > li > ul > li, .menu-phones > ul > li > ul > li > ul > li, .menu-electronics > ul > li > ul > li > ul > li, .menu-business > ul > li > ul > li > ul > li, .menu-computing > ul > li > ul > li > ul > li { 
 
    float: left; 
 
    width: 100%; 
 
    padding: 10px 0; 
 
    margin: 0; 
 
    font-size: .8em; 
 
} 
 

 
.menu-autos > ul > li > ul > li > ul > li a, .menu-phones > ul > li > ul > li > ul > li a , .menu-electronics > ul > li > ul > li > ul > li a , .menu-business > ul > li > ul > li > ul > li a, .menu-computing > ul > li > ul > li > ul > li a { 
 
    border: 0; 
 
} 
 

 
.menu-autos > ul > li > ul.normal-sub, .menu-phones > ul > li > ul.normal-sub, .menu-business > ul > li > ul.normal-sub, .menu-electronics > ul > li > ul.normal-sub, .menu-computing > ul > li > ul.normal-sub { 
 
    width: 300px; 
 
    left: auto; 
 
    padding: 10px 20px; 
 
} 
 

 
.menu-autos > ul > li > ul.normal-sub > li, .menu-phones > ul > li > ul.normal-sub > li, .menu-electronics > ul > li > ul.normal-sub > li, .menu-business > ul > li > ul.normal-sub > li, .menu-computing > ul > li > ul.normal-sub > li { 
 
    width: 100%; 
 
} 
 

 
.menu-autos > ul > li > ul.normal-sub > li a, .menu-phones > ul > li > ul.normal-sub > li a, .menu-electronics > ul > li > ul.normal-sub > li a, .menu-business > ul > li > ul.normal-sub > li a , .menu-computing > ul > li > ul.normal-sub > li a { 
 
    border: 0; 
 
    padding: 1em 0; 
 
} 
 

 

 
/* –––––––––––––––––––––––––––––––––––––––––––––––––– 
 
Mobile style's 
 
–––––––––––––––––––––––––––––––––––––––––––––––––– */ 
 

 
@media only screen and (max-width: 767px) { 
 
    .menu-container { 
 
     width: 100%; 
 
    } 
 
    .menu-mobile { 
 
     display: block; 
 
    } 
 
    .menu-dropdown-icon:before { 
 
     display: block; 
 
    } 
 
    .menu-autos > ul, .menu-phones > ul, .menu-electronics > ul, .menu-business > ul, .menu-computing > ul { 
 
     display: none; 
 
    } 
 
    .menu-autos > ul > li, .menu-phones > ul > li, .menu-electronics > ul > li, .menu-business > ul > li, .menu-computing > ul > li { 
 
     width: 100%; 
 
     float: none; 
 
     display: block; 
 
    } 
 
    .menu-autos > ul > li a, .menu-phones > ul > li a, .menu-electronics > ul > li a, .menu-business > ul > li a , .menu-computing > ul > li a { 
 
     padding: 1.5em; 
 
     width: 100%; 
 
     display: block; 
 
    } 
 
    .menu-autos > ul > li > ul, .menu-phones > ul > li > ul, .menu-electronics > ul > li > ul, .menu-business > ul > li > ul, .menu-computing > ul > li > ul { 
 
     position: relative; 
 
    } 
 
    .menu-autos > ul > li > ul.normal-sub, .menu-phones > ul > li > ul.normal-sub , .menu-electronics > ul > li > ul.normal-sub , .menu-business > ul > li > ul.normal-sub, .menu-computing > ul > li > ul.normal-sub { 
 
     width: 100%; 
 
    } 
 
    .menu-autos > ul > li > ul > li, .menu-phones > ul > li > ul > li, .menu-electronics > ul > li > ul > li, .menu-business > ul > li > ul > li, .menu-computing > ul > li > ul > li { 
 
     float: none; 
 
     width: 100%; 
 
     margin-top: 20px; 
 
    } 
 
    .menu-autos > ul > li > ul > li:first-child, .menu-phones > ul > li > ul > li:first-child, .menu-electronics > ul > li > ul > li:first-child, .menu-business > ul > li > ul > li:first-child, .menu-computing > ul > li > ul > li:first-child { 
 
     margin: 0; 
 
    } 
 
    .menu-autos > ul > li > ul > li > ul, .menu-phones > ul > li > ul > li > ul, .menu-electronics > ul > li > ul > li > ul, .menu-business > ul > li > ul > li > ul, .menu-computing > ul > li > ul > li > ul { 
 
     position: relative; 
 
    } 
 
    .menu-autos > ul > li > ul > li > ul > li, .menu-phones > ul > li > ul > li > ul > li, .menu-electronics > ul > li > ul > li > ul > li, .menu-business > ul > li > ul > li > ul > li, .menu-computing > ul > li > ul > li > ul > li { 
 
     float: none; 
 
    } 
 
    .menu-autos .show-on-mobile, .menu-phones .show-on-mobile, .menu-electronics .show-on-mobile, .menu-business .show-on-mobile, .menu-computing .show-on-mobile { 
 
     display: block; 
 
    } 
 
}

私は元のコード(1つのメニューのためのすなわちのorignalコード)を追加することができるかどうかを確認しようとしますメニュー。 Inを1つのカテゴリに拡張しようとすると、モバイル解像度で隔離されても、それは767ピクセルです。すべてのカテゴリが展開されます。

+0

本文にStackOverflowの文字制限を超えているように見えるため、HTMLを追加できませんでした。 –

答えて

0

別々のCSSクラスを使用したJavaScriptのコピー貼り付けは、保守不能または時間の効率的な使用ではありません。メニューの機能を変更することができます。これらの変更を各メニューカテゴリにわたって複製する必要があります。

より良い解決策は、このコードからプラグインを作成することです。このプラグインは、必要なだけ多くのメニューで使用できます。私は最初にJquery - How to Create a basic pluginを読むことをお勧めします。

+0

私はこのリンクを共有していただきありがとうございます、できるだけ早くそれを読んでいきます。しかし今のところ、私は時間に敏感なプロジェクトの途中です。そして私はページにこの機能が必要です。それが貼り付けられた理由です。 ここにコードに誤りがありますか? –

関連する問題