Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2012, 01:32
Новичок на форуме
Отправить личное сообщение для DzirT Посмотреть профиль Найти все сообщения от DzirT
 
Регистрация: 11.08.2011
Сообщений: 8

Меню аккардион jQuery
Господа программисты помогите пож-та немного доработать.
Есть вертикальное меню меню вида:
<ul id="menu">
  <li> <a href="#">Главная</a>
    <ul>
      <li><a href="#">Каталог 1</a></li>
      <li><a href="#">Каталог 2</a>
        <ul>
          <li><a href="#">Подкаталог 1</a></li>
          <li><a href="#">Подкаталог 2</a></li>
          <li><a href="#">Подкаталог 3</a></li>
        </ul>
      </li>
      <li><a href="#">Каталог 3</a></li>
    </ul>
  </li>
  <li> <a href="#">Programming Languages</a>
    <ul>
      <li><a href="#">PHP</a></li>
      <li><a href="#">Ruby</a></li>
    </ul>
  </li>
</ul>

При клике на Главную открываются пункты: Каталоги, а подкаталоги остаются скрыты.
Какие изменения внести в код ниже чтобы Подкаталоги тоже открывались при клике на Главную.
function initMenu() {
  $('#menu ul').hide();
  $('#menu ul:first').show();
  $('#menu li a').click(
    function() {
      var checkElement = $(this).next();
      if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
        return false;
        }
      if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
        $('#menu ul:visible').slideUp('normal');
        checkElement.slideDown('normal');
        return false;
        }
      }
    );
  }
$(document).ready(function() {initMenu();});
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2012, 13:42
Интересующийся
Отправить личное сообщение для aDiVaNToS Посмотреть профиль Найти все сообщения от aDiVaNToS
 
Регистрация: 28.06.2012
Сообщений: 17

Это все можно сделать с помощью одного лишь СSS и не нужно здесь скрипта =) сэкономишь на времени загрузки страницы пару милисек =)
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2012, 14:00
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от aDiVaNToS
Это все можно сделать с помощью одного лишь СSS и не нужно здесь скрипта =) сэкономишь на времени загрузки страницы пару милисек =)
Покажешь как? Мне даже любопытно как ты это сделаешь так, что бы открытое меню еще и не закрывалось после открытия.

<style>
    #menu > li ul {
        display: none;
    }
    #menu > li > a:focus ~ ul,
    #menu > li > a:focus ~ ul ul {
        display: block;
    }
</style>
<ul id="menu">
  <li> <a href="#">Главная</a>
    <ul>
      <li><a href="#">Каталог 1</a></li>
      <li><a href="#">Каталог 2</a>
        <ul>
          <li><a href="#">Подкаталог 1</a></li>
          <li><a href="#">Подкаталог 2</a></li>
          <li><a href="#">Подкаталог 3</a></li>
        </ul>
      </li>
      <li><a href="#">Каталог 3</a></li>
    </ul>
  </li>
  <li> <a href="#">Programming Languages</a>
    <ul>
      <li><a href="#">PHP</a></li>
      <li><a href="#">Ruby</a></li>
    </ul>
  </li>
</ul>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2012, 14:30
Интересующийся
Отправить личное сообщение для aDiVaNToS Посмотреть профиль Найти все сообщения от aDiVaNToS
 
Регистрация: 28.06.2012
Сообщений: 17

devote,
извини забыл оно должно не сворачиваться=(
прочитал просто меню =)))

Последний раз редактировалось aDiVaNToS, 01.07.2012 в 14:47.
Ответить с цитированием
  #5 (permalink)  
Старый 01.07.2012, 15:56
Новичок на форуме
Отправить личное сообщение для DzirT Посмотреть профиль Найти все сообщения от DzirT
 
Регистрация: 11.08.2011
Сообщений: 8

Видимо в таком варианте решения нет
Ответить с цитированием
  #6 (permalink)  
Старый 01.07.2012, 15:57
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

DzirT,
Да есть - не хнычь - думайте - или ждите вечера я или devote или melky
поправят
к примеру для инициализации нун так
$('#menu li:first ul').show()
Ответить с цитированием
  #7 (permalink)  
Старый 01.07.2012, 18:29
Новичок на форуме
Отправить личное сообщение для DzirT Посмотреть профиль Найти все сообщения от DzirT
 
Регистрация: 11.08.2011
Сообщений: 8

нашел вариант к списку подкаталогов присвоить селектор :
<ul id="menu2">
            <li><a href="#">Подкаталог 1</a></li>
            <li><a href="#">Подкаталог 2</a></li>
            <li><a href="#">Подкаталог 3</a></li>
          </ul>


ну а далее .toggle() :

function initMenu() {
  $('#menu ul').hide();
  $('#menu ul:first, #menu li:first ul').show();
  $('#menu li a').click(
    function() {
	$('#menu2, #menu2 li, #menu2 li a').toggle()
      var checkElement = $(this).next();
      if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
        return false;
        }
      if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
        $('#menu ul:visible, #menu li:visible ul').slideUp('normal');
        checkElement.slideDown('normal');
        return false;
        }
      }
    );
  }
$(document).ready(function() {initMenu();});

На сколько это правильно? А вот без второго селектора, как изначально задумано, никак - не могу понять как указать в таком случае вложенность.
P.S. и так при клике на любом пункте <ul id="menu2">....</ul> закрывается.

Последний раз редактировалось DzirT, 01.07.2012 в 18:43.
Ответить с цитированием
  #8 (permalink)  
Старый 01.07.2012, 18:53
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от DzirT
нашел вариант к списку подкаталогов присвоить селектор :
яж показал вариант на CSS, перелопатить его не джуквери не должно было составить труда:
<!DOCTYPE html>
<html>
    <head>
        <style type="text/css">
            #menu > li > ul {
                display: none;
            }
        </style>
        <script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(function(){
                $("#menu > li > a").click(function() {
                    $( "~ ul", this ).slideToggle();
                });
            });
        </script>
    </head>
    <body>
        <ul id="menu">
          <li> <a href="#">Главная</a>
            <ul>
              <li><a href="#">Каталог 1</a></li>
              <li><a href="#">Каталог 2</a>
                <ul>
                  <li><a href="#">Подкаталог 1</a></li>
                  <li><a href="#">Подкаталог 2</a></li>
                  <li><a href="#">Подкаталог 3</a></li>
                </ul>
              </li>
              <li><a href="#">Каталог 3</a></li>
            </ul>
          </li>
          <li> <a href="#">Programming Languages</a>
            <ul>
              <li><a href="#">PHP</a></li>
              <li><a href="#">Ruby</a></li>
            </ul>
          </li>
        </ul>
    </body>
</html>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #9 (permalink)  
Старый 01.07.2012, 19:37
Новичок на форуме
Отправить личное сообщение для DzirT Посмотреть профиль Найти все сообщения от DzirT
 
Регистрация: 11.08.2011
Сообщений: 8

Цитата:
яж показал вариант на CSS,
Кликнул на главную - открылось, кликнул на Programming Languages - открылось, а главная не закрылась. Тот код что я дал в начале есть чуть ли не в каждом ГС -блоге, и ваш вариант в интерпретациях попадался тоже. Но к сожалению варианта как я указал ( чистые списки с тремя уровнями, не накачанные тегами span div и тд не нашел, где при клике на пункт - неактивный свертывается, может плохо искал.
Цитата:
перелопатить его не джуквери не должно было составить труда
Извините, я только учусь, вернее пытаюсь.

Последний раз редактировалось DzirT, 01.07.2012 в 19:39.
Ответить с цитированием
  #10 (permalink)  
Старый 01.07.2012, 19:58
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от DzirT
где при клике на пункт - неактивный свертывается, может плохо искал.
вот проблема то. Вы же ничего изначально не пояснили, от того и получили вариант не тот что нужно:
<!DOCTYPE html>
<html>
    <head>
        <style type="text/css">
            #menu > li > ul {
                display: none;
            }
            #menu > li:first-child > ul {
                display: block;
            }
        </style>
        <script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(function(){
                $("#menu > li > a").click(function() {

                    $( "~ ul", this ).slideToggle();

                    var self = $( this ).next();

                    $( "#menu > li > ul" ).each(function() {

                        if ( self[0] !== this ) {

                            $( this ).slideUp();
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <ul id="menu">
          <li> <a href="#">Главная</a>
            <ul>
              <li><a href="#">Каталог 1</a></li>
              <li><a href="#">Каталог 2</a>
                <ul>
                  <li><a href="#">Подкаталог 1</a></li>
                  <li><a href="#">Подкаталог 2</a></li>
                  <li><a href="#">Подкаталог 3</a></li>
                </ul>
              </li>
              <li><a href="#">Каталог 3</a></li>
            </ul>
          </li>
          <li> <a href="#">Еще какая то</a>
            <ul>
              <li><a href="#">Каталог 1</a></li>
              <li><a href="#">Каталог 2</a>
                <ul>
                  <li><a href="#">Подкаталог 1</a></li>
                  <li><a href="#">Подкаталог 2</a></li>
                  <li><a href="#">Подкаталог 3</a></li>
                </ul>
              </li>
              <li><a href="#">Каталог 3</a></li>
            </ul>
          </li>
          <li> <a href="#">Programming Languages</a>
            <ul>
              <li><a href="#">PHP</a></li>
              <li><a href="#">Ruby</a></li>
            </ul>
          </li>
        </ul>
    </body>
</html>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 01.07.2012 в 20:05.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу jQuery плагин для создания меню Zeboton jQuery 9 15.09.2014 15:31
Меню с использованием Jquery, "защита от дурака" :) vyrtime jQuery 2 05.08.2011 12:50
Не работает jQuery меню с AJAX eugene1986 jQuery 0 08.07.2010 18:49
jQuery jTreeMenu plugin Seafnox jQuery 9 12.01.2010 21:55
анимированное меню на jquery глючит в ie leCadavreExquis jQuery 3 30.12.2009 17:30