Меню на jQuery. Помогите доделать клик на странице. Deff
Этот скрипт взят у 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/3C3. Работает клик по странице и все скрывается, но есть лишь одна трудность, если кликнуть в любом месте выпадающего меню, то оно тоже скрывается, собственно это и нужно исправить. |
Mizter,
Чтобы не скрывался - последняя рабочай ссылка в меню должна быть реальной ссылкой, а не <li><a href="#">Главная 2</a></li> Либо должна быть продолжена вложенность |
Deff, не могли бы Вы это сделать? Я изменил все <li><a href="#">Главная 2</a></li> на рабочие ссылки и все равно не работает.
|
Цитата:
|
Цитата:
В песочницах переходы по ссылкам запрещены И куки в песочне не держаться, поскольку при каждом просмотре генериться новая страница |
Deff,
http://artlab.tk/laboratorize/ver.0.1a/index.html вот реальная текстовая страница В ней видно, что в куки не записывается событие нажатия мышкой по любому месту страницы и последующему скрытию объекта. |
Mizter,
Криво скопировали скрипт куков, работал же, зачем красоту наводить, и суньте скрипты, как есть на страницу, <!DOCTYPE html> <html> <head> <title>Песочница</title> <link rel="stylesheet" href="http://artlab.tk/laboratorize/ver.0.1a/my.css" type="text/css" media="screen" /> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <!--<script type="text/javascript" src="http://artlab.tk/laboratorize/ver.0.1a/my.js"></script>--> <script type="text/javascript"> 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 ).toggle();return true; } if ( jQuery.inArray( this, self.parents( "ul" ) ) == -1 ) { $( this ).hide();return true; } showedElems.push(index); }); // эту переменную суём в куки, setcookie( "MENU", showedElems.join(",") ,30*3600*24*1000 ); return false; }); }) </script> <style> .sub-menu a { display:inline-block; width:100%; margin:0; } </style> </head> <body> <ul class="menu"> <li><a href="#">My Account</a> <ul class="sub-menu"> <li><a href="/laboratorize/ver.0.1a/index2.html">Главная 2</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html" >Dashboard</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html" >Profile</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html">Settings</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html">Send Feedback Follow Link</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html">Sign Out</a></li> </ul> </li> <li><a href="#dashboard" >Dashboard</a> <ul class="sub-menu"> <li><a href="/laboratorize/ver.0.1a/index2.html">Главная 2</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html" >Dashboard</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html" >Profile</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html">Settings</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html">Send Feedback Follow Link</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html">Sign Out</a></li> </ul> </li> <li><a href="/laboratorize/ver.0.1a/index.html" >Profile</a></li> <li class="tap"><a href="/laboratorize/ver.0.1a/index.html">Settings</a></li> <li><a href="/laboratorize/ver.0.1a/index.html">Send Feedback Follow Link</a></li> <li><a href="#signout">Sign Out</a> <ul class="sub-menu"> <li><a href="/laboratorize/ver.0.1a/index2.html">Главная 2</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html" >Dashboard</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html" >Profile</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html">Settings</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html">Send Feedback Follow Link</a></li> <li><a href="/laboratorize/ver.0.1a/index2.html">Sign Out</a></li> </ul> </li> </ul> </body> </html> |
Deff,
Скрипит куков работает правильно и записывает информацию о нажатии, но только при повторном нажатии на элемент, когда нужно скрыть, нужно просто прописать записывание куков в .click(function () {....}); но Я не знаю как правильно, плюс еще не знаю как решить проблему с нажатием на выпадающее меню и последующим его скрытием Тем более если вставлять весь код целиком на страницу, то это будет не совсем удобно для последующей правки, стремлюсь к меньшему количеству строк |
Пробуйте - собрал из Ваших кусков и вставил куки исходные
Проверить память: выбрать менюшку и нажать повторно "посмотреть" ========================================= Во фрейме, тут в топике, - DOM устанавливаецо медленно, так что кликайте после 20-30 сек |
Добавил стиль, чтоб не кликалось мимо ссылки
<style> .sub-menu a { display:inline-block; width:100%; margin:0; } </style> |
Часовой пояс GMT +3, время: 15:08. |