• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Неправильно работает меню-аккордеон (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

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

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

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