Jump to content
  • 0

Меню на аккордеоне (немогу допилить)


Belovsan
 Share

Question

В общем есть менюха: http://blog.evaria.com/wp-content/themes/blogvaria/jquery/index-multi.php

И всё в ней пучком, да только захлопывается зараза при переходе по активной ссылке. Я так понял, что для того, чтоб она не схлопывалась, к ней надо прикрутить jquery.cookie.js Это я сделал, но вот походу ещё и какой-то сценарий нужно написать, чтоб оно работало. Вот это сижу, втыкаю как баран, ничё не могу понять (((

Если есть добрые люди, которые знают как меня осчастливить - помогите плиз. Бду очень благодарен )

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Повесь на ссылку обработчик, где сначала переходи по ссылке с помощью window.location, а потом возвращай фолс

Ну и что это даст?

Это обычно реализуется так:

если это активная линка - ей присваивается класс, это серверная часть.

А джс проверяет, если есть этот класс, то по умолчанию блок оставить открытым, это уже клиентская часть.

Link to comment
Share on other sites

  • 0

Ну, эт один из вариантов. Но есть ещё такой способ. Что вот если я, например, открыл меню и перешёл по ссылке, то сохраняется этот вид меню уже на новой странице. Короче как-то через cookie делается. Вот тут я прочитал: http://alt-f4.ru/expanding-menu-by-jquery

Но вот как именно это дело присобачить к моей менюхе я х/з (

Edited by Belovsan
Link to comment
Share on other sites

  • 0

В общем, остановился таки на этом варианте: http://alt-f4.ru/expanding-menu-by-jquery

Но проблема в том, что мне нужно чтобы был переход по ссылке, которая имеет вложения. При этом пункт меню по которому переходишь тож должен раскрыться. Судя по коду надо бы изменить вот эту строку: return false; // Prohibit the browser to follow the link address на return true; // Prohibit the browser to follow the link address/ Однако, тогда получается, что переход возможен, а менюха не разворачивается (. Гуру, помогите, плиз )

Сам код вот (там используются кукисы и jquery.js):


$(document).ready(function() {
$('ul#my-menu ul').each(function(i) { // Check each submenu:
if ($.cookie('submenuMark-' + i)) { // If index of submenu is marked in cookies:
$(this).show().prev().removeClass('collapsed').addClass('expanded'); // Show it (add apropriate classes)
}else {
$(this).hide().prev().removeClass('expanded').addClass('collapsed'); // Hide it
}
$(this).prev().addClass('collapsible').click(function() { // Attach an event listener
var this_i = $('ul#my-menu ul').index($(this).next()); // The index of the submenu of the clicked link
if ($(this).next().css('display') == 'none') {

// When opening one submenu, we hide all same level submenus:
$(this).parent('li').parent('ul').find('ul').each(function(j) {
if (j != this_i) {
$(this).slideUp(200, function () {
$(this).prev().removeClass('expanded').addClass('collapsed');
cookieDel($('ul#my-menu ul').index($(this)));
});
}
});
// :end

$(this).next().slideDown(200, function () { // Show submenu:
$(this).prev().removeClass('collapsed').addClass('expanded');
cookieSet(this_i);
});
$('ul#my-menu a').click(function(){
if(!$(this).next().is('ul')){
$(this).parents('li').siblings().each(function(i){
if($(this).children('a').is('.collapsible')){
ul = $(this).children('ul');
ul.hide().prev().removeClass('expanded').addClass('collapsed');
var this_i = $('ul#my-menu ul').index(ul);
cookieDel(this_i);
ul.find('ul').each(function() {
$(this).hide(0, cookieDel($('ul#my-menu ul').index($(this)))).prev().removeClass('expanded').addClass('collapsed');
});
}
});
}
});

}else {
$(this).next().slideUp(200, function () { // Hide submenu:
$(this).prev().removeClass('expanded').addClass('collapsed');
cookieDel(this_i);
$(this).find('ul').each(function() {
$(this).hide(0, cookieDel($('ul#my-menu ul').index($(this)))).prev().removeClass('expanded').addClass('collapsed');
});
});
}
return false; // Prohibit the browser to follow the link address
});
});
});
function cookieSet(index) {
$.cookie('submenuMark-' + index, 'opened', {expires: null, path: '/'}); // Set mark to cookie (submenu is shown):
}
function cookieDel(index) {
$.cookie('submenuMark-' + index, null, {expires: null, path: '/'}); // Delete mark from cookie (submenu is hidden):
}

Edited by Belovsan
Link to comment
Share on other sites

  • 0

На jquery такое меню - расточительство! Определение текущего раздела сайта с использованием кукисов - изврат. Можно, конечно, но есть много минусов, да и зачем такие сложности?

Каким образом у вас формируются страницы на сервере? Жестко описаны или динамически собираются скриптом? В разных случаях разные способы фиксации в развернутом состоянии текущего пункта меню, но в любом случае куки - ехать из Москвы в Ленинград через южный полюс...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy