Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Проблема с автоскрытием элементов навигации (https://javascript.ru/forum/dom-window/29179-problema-s-avtoskrytiem-ehlementov-navigacii.html)

Deff 19.06.2012 13:27

Цитата:

Сообщение от devote
я ему подал идею, дальше думаю сам разберется.

Вряд ли - Дай намёк - Какой признак сохранять в кукисы ?

zevilz 19.06.2012 18:15

Цитата:

Сообщение от Deff (Сообщение 182382)
devote, + Ток куки забыл , чел вряд ли подсунет

Воть есть коротенькие

==========
setcookie(Name,val,3600*24*1000); //Пример с Таймом на один день
Стереть
setcookie(Name,val,-1000);

Что то я не понял как кукисы приделать:-?

Deff 19.06.2012 18:23

zevilz,
Чуть позжа - есть идея чисто по клику считывать кол-во parents("UL").length от начала менюшки

И по загрузке все эти UL.show()

devote 19.06.2012 18:43

Цитата:

Сообщение от zevilz
Что то я не понял как кукисы приделать

<!doctype html>
<html>
<head>
<meta charset="UTF-8">

<style>
    #nav_menu_content ul {
        display: none;
    }
</style>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">

    $(function(){

        var nav = $("#nav_menu_content"),
            uls = nav.find("ul");

        // тут получаем индексы из куки и перебираем их:

        var showedElems = [0,1]; // индексы из куки

        for( var i = 0; i < showedElems.length; i++ ) {
            // отображаем при загрузке то что надо.
            $( uls[ showedElems[ i ] ] ).show();
        }

        nav.find("a").click(function() {

            var self = $(this).next();

            if ( self.length  > 0 ) {

                var showedElems = [];

                uls.each(function( index ){

                    if ( this === self[0] ) {
                        if ( self.css('display') == "none" ) {
                            showedElems[ showedElems.length ] = index;
                        }
                        $( this ).slideToggle( 200 );
                    } else if ( jQuery.inArray( this, self.parents( "ul" ) ) == -1 ) {
                        $( this ).slideUp( 200 );
                    } else {
                        showedElems[ showedElems.length ] = index;
                    }
                });

                alert( "вот тут все эти индексы можно сунуть в куку: " + showedElems );

                return false;
            }

        });

    });

</script>
</head>
<body>
<ul class='left_nav_menu' id='nav_menu_content'>
    <li><a href='#0'>Категория_1</a>
        <ul>
            <li><a href="#">Подкатегория_1</a>
                <ul>
                    <li><a href="view_cat.php?...">Подподкатегория_1</a></li>
                </ul>
            </li>
            <li><a href="#">Подкатегория_2</a>
                <ul>
                    <li><a href="view_cat.php?...">Подподкатегория_2</a></li>
                    <li><a href="view_cat.php?...">Подподкатегория_3</a></li>
                </ul>
            </li>
            <li><a href="#">Подкатегория_3</a>
                <ul>
                    <li><a href="view_cat.php?...">Подподкатегория_4</a></li>
                    <li><a href="view_cat.php?...">Подподкатегория_5</a></li>
                </ul>
            </li>
        </ul>
    </li>
    <li><a href='#0'>Категория_2</a>
        <ul>
            <li><a href="#">Подкатегория_4</a>
                <ul class="material_cat">
                    <li><a href="view_cat.php?...">Подподкатегория_6</a></li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

zevilz 19.06.2012 19:49

Если честно, так нифига и не понял как эти кукисы приделать к скрипту...:blink: Сильно не пинайте, я только учусь.:-? Каким то образом сохранилось одно положение в меню и после перезагрузки берется из куки.

zevilz 19.06.2012 19:54

Вот это "setcookie(Name,val,3600*24*1000);" нужно сунуть вместо алерта? И если это, то что будет name, а что val?

devote 19.06.2012 20:00

Цитата:

Сообщение от zevilz
Если честно, так нифига и не понял как эти кукисы приделать к скрипту... Сильно не пинайте, я только учусь. Каким то образом сохранилось одно положение в меню и после перезагрузки берется из куки.

$(function(){

        var nav = $("#nav_menu_content"),
            uls = nav.find("ul");

        // тут получаем индексы из куки и перебираем их:
        var showedElems = ( getcookie( "MENU" ) || "" ).split(",");

        for( var i = 0; i < showedElems.length; i++ ) {
            // отображаем при загрузке то что надо.
            $( uls[ showedElems[ i ] ] ).show();
        }

        nav.find("a").click(function() {

            var self = $(this).next();

            if ( self.length  > 0 ) {

                var showedElems = [];

                uls.each(function( index ){

                    if ( this === self[0] ) {
                        if ( self.css('display') == "none" ) {
                            showedElems[ showedElems.length ] = index;
                        }
                        $( this ).slideToggle( 200 );
                    } else if ( jQuery.inArray( this, self.parents( "ul" ) ) == -1 ) {
                        $( this ).slideUp( 200 );
                    } else {
                        showedElems[ showedElems.length ] = index;
                    }
                });

                // вот эту переменную со строкой засуньте в куки,
                // примерно так:
                setcookie( "MENU", showedElems.join(",") ,3600*24*1000 );

                return false;
            }

        });

    });

devote 19.06.2012 20:02

Цитата:

Сообщение от zevilz
Вот это "setcookie(Name,val,3600*24*1000);" нужно сунуть вместо алерта? И если это, то что будет name, а что val?

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

zevilz 19.06.2012 20:45

Вроде работает, но с Вашими функциями. Щас еще пошаманю

zevilz 19.06.2012 21:01

Работает все отлично:)
Убрал
<style>
#nav_menu_content ul {
     display: none;}
</style>

И добавил в начало скрипта:
$(document).ready(function() {
$("ul#nav_menu_content ul").addClass("display_none");
});

(Класс display_none у меня прописан в css)
А то при отключении сценариев js в браузере навигация можно сказать вообще бесполезна.
Я думаю лучше оставлю ваш код, а плагин jquery cookie выкину. Он все равно только лежал ради навигации. Всем большое спасибо за помощь!:)


Часовой пояс GMT +3, время: 17:28.