2015-01-12 2 views
0

Я использую метод JQuery toggle для отображения divs на основе ссылки, которую пользователь нажмет.JQuery toggle закрыть другие контейнеры

http://jsfiddle.net/Rn9tg/905/

Единственное, что я хочу, чтобы изменить это, чтобы иметь другие меню закрывается, когда другой один щелкают. Таким образом, только одно меню всегда будет открыто одновременно. Может ли кто-нибудь показать мне самый прямой метод для достижения этого?

Jquery 
$(document).ready(function() { 
    $('#homeMenu').click(function() { 
      $('#menu1').slideToggle("fast"); 
    }); 
     $('#shopMenu').click(function() { 
      $('#menu2').slideToggle("fast"); 
    }); 
    $('#faqMenu').click(function() { 
      $('#menu3').slideToggle("fast"); 
    }); 
}); 

HTML

<div id="Navigation"> 
<ul> 
    <li><a href="#" id="homeMenu">Home</a></li> 
    <li><a href="#" id="shopMenu">Shop</a></li> 
    <li><a href="#" id="faqMenu">FAQ</a></li> 
</ul> 
</div> 

<div id="menu1" style="display:none;">This is menu one</div> 
<div id="menu2" style="display:none;">This is menu two</div> 
<div id="menu3" style="display:none;">This is menu three</div> 
+0

Вы хотите только 1 расширенный за раз? – giannisf

+0

Да. прости. я отредактирую сообщение, чтобы сделать это более понятным. – onTheInternet

ответ

1

Вероятно, чтобы разместить дивы в контейнере:

<div> 
    <div id="menu1" style="display:none;">This is menu one</div> 
    <div id="menu2" style="display:none;">This is menu two</div> 
    <div id="menu3" style="display:none;">This is menu three</div> 
</div> 

А затем изменить ваш JavaScript для каждого пункта меню, как так:

$('#menu1').slideToggle("fast").siblings().hide(); 
+0

Ничего себе. Мне нравится это решение. будет повышать, когда это возможно. – onTheInternet

+0

Рассмотрите решение, которое не полагается на несколько идентификаторов. Это может быть сложно поддерживать и несколько хрупко, поскольку это зависит от большой разметки. – isherwood

-1

Вы можете перемещать вручную другой конт iners.

var menus = ['#menu1', '#menu2', '#menu3'] 

    $('#homeMenu').click(function() { 
      $('#menu1').slideToggle("fast"); 
      $(menus.join(',').replace('#menu1')).slideUp(); 
    }); 
     $('#shopMenu').click(function() { 
      $('#menu2').slideToggle("fast"); 
      $(menus.join(',').replace('#menu2')).slideUp(); 

    }); 
    $('#faqMenu').click(function() { 
      $('#menu3').slideToggle("fast"); 
          $(menus.join(',').replace('#menu3')).slideUp(); 

    }); 

http://jsfiddle.net/Rn9tg/906/

+0

Хотя это работает, это излишне сложно и несколько трудно читать. Только более опытные разработчики будут знать, что делает «join». – isherwood

+0

@isherwood да, я знаю, я поддержал бристольский james ответ – giannisf

2

Это редко хорошая идея использовать кучу идентификаторов для такого рода вещи. Вместо этого следует использовать DOM обход относительно щелкнутого элемента:

$('#navigation ul li').click(function() { 
    var idx = $(this).index(); 

    $('#content > div').eq(idx).slideToggle().siblings().slideUp(); 
}); 

Demo

Обратите внимание, что я положил обертки вокруг содержания. Это решение зависит только от двух идентификаторов, и это может быть сведено к одному с некоторыми дополнительными изменениями разметки.

+0

Хотя это отличный ответ, кто-то добрался до вас. Спасибо за понимание, хотя! Мне нравится .slideup() лучше, чем .hide() – onTheInternet

+0

Сроки не имеют значения, когда ответы довольно разные. ;-) – isherwood