Этот скрипт взят у
Deff
Есть идея доработки. Идея в том, что данный скрипт будет использован в качестве горизонтального меню.
Добавить нужно лишь действие описывающее клик на любом месте страницы, при котором открытые пункты меню будут сворачиваться.
И вместо $( this ).slideToggle( 1 );return true; и $( this ).slideUp( 1 );return true; сделать .hide(); и .show();
Попробовал реализовать все сам, но к сожалению ничего не получилось.
function setcookie(a,b,c) {
if(c){
var d = new Date();
d.setTime(d.getTime()+c);
}
if(a && b)
document.cookie = a+'='+b+(c ? '; expires='+d.toUTCString() : '');
else
return false;
}
function getcookie(a) {
var b = new RegExp(a+'=([^;]){1,}');
var c = b.exec(document.cookie);if(c) c = c[0].split('=');
else
return false;
return c[1] ? c[1] : false;
}
$(document).ready(function() {
var nav = $(".menu");
var uls = nav.find("ul");
$('ul li').has('ul').addClass('include');
var coci_MENU= getcookie( "MENU" );
if (coci_MENU) {
setcookie( "MENU",coci_MENU ,30*3600*24*1000 );
// тут получаем индексы из куки и перебираем их:
var showedElems = ( coci_MENU || "" ).split(",");
for( var i = 0; i < showedElems.length; i++ ) {
// отображаем при загрузке то что надо.
$( uls[ showedElems[ i ] ] ).show();
}
}
nav.find("a").click(function() {
var Lnk=$(this).attr("href");
if(Lnk==''||Lnk.indexOf('#')==0) setcookie( "MENU",1 ,-1);
var self = $(this).next();
if ( self.length == 0 ) return;
var showedElems = [];
uls.each(function( index ){
if ( this === self[0] ) {
if ( self.css('display') == "none" ) {showedElems.push(index);}
$( this ).slideToggle( 1 );return true;
}
if ( jQuery.inArray( this, self.parents( "ul" ) ) == -1 ) {
$( this ).slideUp( 1 );return true;
}
showedElems.push(index);
});
// эту переменную суём в куки,
setcookie( "MENU", showedElems.join(",") ,30*3600*24*1000 );
return false;
});
}).click(function() {
$(".sub-menu").hide();
$(".highlight").removeClass("highlight");
});
Вот то, что у меня получилось
http://learn.javascript.ru/play/C8DbZ.
Работает клик по странице и все скрывается, но есть лишь одна трудность, если кликнуть в любом месте выпадающего меню, то оно тоже скрывается, собственно это и нужно исправить.