• Codeby web-security - Курс "Тестирование Веб-Приложений на проникновение с нуля" от команды codeby. Общая теория, подготовка рабочего окружения, пассивный фазинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь

Неправильно работает меню-аккордеон (jquery)

  • Автор темы serdeles
  • Дата начала
S

serdeles

#1
Код:
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();});
Это скрипт, который отвечает за работу меню-аккордеона.

Чтобы долго не объяснять проблему, приведу ссылку, где поясняется всё наглядно: http://serdeles.narod.ru/menu/.


При клике на подраздел и последующем переходе по ссылке, меню возвращается к своему исходному состоянию: по-умолчанию раскрыты подразделы первого раздела. Если раскрыть второй (или последующие) разделы и нажать на ссылку подраздела, то на новой странице раскрытым вновь оказывается первый раздел, а не тот, который нужен. В общем, лучше наглядно посмотреть, чем читать этот абзац.
 

ikot

Active member
11.06.2008
27
0
#2
Код:
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();});
Это скрипт, который отвечает за работу меню-аккордеона.

Чтобы долго не объяснять проблему, приведу ссылку, где поясняется всё наглядно: http://serdeles.narod.ru/menu/.


При клике на подраздел и последующем переходе по ссылке, меню возвращается к своему исходному состоянию: по-умолчанию раскрыты подразделы первого раздела. Если раскрыть второй (или последующие) разделы и нажать на ссылку подраздела, то на новой странице раскрытым вновь оказывается первый раздел, а не тот, который нужен. В общем, лучше наглядно посмотреть, чем читать этот абзац.
Все дело в том - что когда вы кликаете на подраздел, то вы переходите на новую страницу, в ней же заново генерируется такое же меню, естественно что оно должно иметь первоначальный вид. Для обхода этой проблемы есть несколько решений:
1) отображать страницы на которые нужно перейти при клике на подразделе в фрейме

2) подгружать новые страницы в отдельный DIV. Для этого естественно нужно поработать с AJAX.

3) передавать на новую страницу id раздела, в котором был произведен клик на его подраздел, а затем раскрывать в новом документе раздел меню именно с указанным id.
 
S

serdeles

#3
Спасибо.
В свое время проблему так и не решил (оказалось, что заказчика работа меню вполне устроила и в таком виде).

Но в будущем ваши советы наверняка пригодятся. Не мне, так кому-то еще :)
 
Вверх Снизу