• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

serdeles

Код:
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();});

Это скрипт, который отвечает за работу меню-аккордеона.

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


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

ikot

Код:
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();});

Это скрипт, который отвечает за работу меню-аккордеона.

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


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

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

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

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

serdeles

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!