Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.10.2010, 20:29
Новичок на форуме
Отправить личное сообщение для Улугбек Посмотреть профиль Найти все сообщения от Улугбек
 
Регистрация: 10.10.2010
Сообщений: 4

Как сохронить сотояние элементов?
Народ очень нужна помощь, в jQuery начал разбираться не давно, да и в javascript не шарю, (я больше по серверной части) цель создать виджет типа iGoogle а конкретный пример на bfm.ru

<script type="text/javascript">
jQuery.noConflict();
jQuery(document).ready(function(){

var columnslist='#sortable1, #sortable2, #sortable3, #sortable4';
function getItems(container,columnslist)//получаю расположение айтэмов в виде X%Y,X2%Y2|X3%Y3,X4%Y4 где '|'-разделение на столбцы а каждая пара X%Y это айтэм
{
var columns = [];

jQuery(columnslist).each(function(){
columns.push(jQuery(this).sortable('toArray').join (','));
});

return columns.join('|');
};


jQuery(function(){
jQuery(columnslist).sortable({
connectWith:'.connectedSortable',
update:function(){jQuery.cookie('items', getItems('#wrapper',columnslist));}//здесь с помошью UI создаю 4 sortable колонки и сохраняю их расположение при каждом обновлении в куках
});

});

jQuery(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all")
.find(".portlet-header")
.addClass("ui-widget-header ui-corner-all")
.prepend('<span class="ui-icon ui-icon-minusthick"></span>')
.end()
.find(".portlet-content");//добавляю "минус" на окошко чтобы сворачивать его

jQuery(".portlet-header .ui-icon").click(function() {
jQuery(this).toggleClass("ui-icon-minusthick").toggleClass("ui-icon-plusthick");
jQuery(this).parents(".portlet:first").find(".port let-content").toggle();
});//ну а тут функция сворачивания

});

</script>

html и серверную часть показывать наверное толку нет это модуль для Joomla, а проблема у меня в том что, у меня все работает, сохраняет все в куках, подгружает обратно но мне нужно, чтобы состояние toggle или нет тоже было, то есть если пользователь закрыл страничку с 3мя свернутыми и 1й развернутой, чтобы именно так и загружалась обратно. может кто подсказать как это сделать Был бы очень благодарен. В принципе я понимаю что можно при каждом сворачивание добавить к id какой нибудь индикатор toggle(X%Y+,X%Y-) или нет а затем при подгрузке пройтись по всем элементам и свернуть те что надо или развернуть, но воплотить это в код на javascript времени не хватит, может кто сталкивался, помогите пожалуйста.

Последний раз редактировалось Улугбек, 10.10.2010 в 20:32.
Ответить с цитированием
  #2 (permalink)  
Старый 10.10.2010, 23:06
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Приблизительно подход такой:
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script src="http://plugins.jquery.com/files/jquery.cookie.js.txt" type="text/javascript"></script>
<style>
.div1, .div2 {width: 200px; height: 30px;} .div1 {background: red;} .div2 {display: none; background: green;} .block {display: block;}
</style>

<script>
$(function(){
    $('.div1').each(function(){
	if(/block/.test($.cookie('demo'))){ //тут делаем проверку
		$(this).next().addClass('block');
	}
	$(this).click(function(){
		$(this).next().toggleClass('block');
			$.cookie('demo', $(this).next().attr('class'), {expires: 10, path: '/', domain: '/'});
		});
	});
});
</script>

<div class="div1"></div>
<div class="div2"></div>

Последний раз редактировалось monolithed, 10.10.2010 в 23:22.
Ответить с цитированием
  #3 (permalink)  
Старый 11.10.2010, 00:06
Новичок на форуме
Отправить личное сообщение для Улугбек Посмотреть профиль Найти все сообщения от Улугбек
 
Регистрация: 10.10.2010
Сообщений: 4

То есть мне даже и в серверную часть лезть не надо?) и она сама сохранит и подгрузит?
Ответить с цитированием
  #4 (permalink)  
Старый 11.10.2010, 01:35
Новичок на форуме
Отправить личное сообщение для Улугбек Посмотреть профиль Найти все сообщения от Улугбек
 
Регистрация: 10.10.2010
Сообщений: 4

$(function(){
$('.div1').each(function(){
if(/block/.test($.cookie('demo'))){ //тут делаем проверку
$(this).next().addClass('block');

Ой по торопился радоваться, если этот код использовать для нескольких элементов 'div1' то из-за this она берет и у всех с этим классом класс и меняет, то есть если один видим то становятся видимы все и на оборот, я попробовал с id вот так

style>
#div1, #div2, #div3, #div4 {width: 200px; height: 30px;}
#div1 {background: red;}
#div2 { background: green;}
#div3{background-color:#000;}
#div4{ background: #3C0;}
.block {display: none;}
</style>

<script>
$(function(){
$('#div1,#div3').each(function(){
if(/block/.test($.cookie('demo'))){ //тут делаем проверку
$(this).next().addClass('block');
}
$(this).click(function(){
$(this).next().toggleClass('block');
$.cookie('demo', $(this).next().attr('class'), {expires: 10});
});
});
});
</script>
</head>
<body>
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
<div id="div4"></div>
</body></html>

Но нет тот же эффект this то все равно '#div1,#div3' как укахать конкретный элемент?
Ответить с цитированием
  #5 (permalink)  
Старый 11.10.2010, 01:45
Новичок на форуме
Отправить личное сообщение для Улугбек Посмотреть профиль Найти все сообщения от Улугбек
 
Регистрация: 10.10.2010
Сообщений: 4

Я тут подумал, а в куках же
$.cookie('demo', $(this).next().attr('class'), {expires: 10}); каждый раз перезаписывается 1 переменная demo! Ну так это значит что это решение для 1го элемента Подскажите решения для нескольких элементов.
Ответить с цитированием
  #6 (permalink)  
Старый 11.10.2010, 08:08
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Вы все напутали, я же для удобства примера написал цепочку $(this).next().

<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script src="http://plugins.jquery.com/files/jquery.cookie.js.txt" type="text/javascript"></script>
<style>
.div1, .div2, .div3, .div4 {width: 200px; height: 30px;}
.div1 {background: red;}
.div2 {background: green;}
.div3 {background: #000;}
.div4 {background: #3C0;}
.div2, .div4 {display: none;}
.block {display: block;}
</style>

<script>
$(function(){
    $('#div1, #div2').each(function(){
        if(/block/.test($.cookie('demo'))){
            $(this).find('div').addClass('block'); //для всех div)
        }
         //тут возможные условия проверки
        $(this).click(function(){
            $(this).find('div').toggleClass('block');
            $.cookie('demo', $(this).next().attr('class'), {expires: 10});
        });
    });
});
</script>

<div id="div1">
    <div class="div1"></div>
    <div class="div2"></div>
</div>
<div id="div2">
    <div class="div3"></div>
    <div class="div4"></div>
</div>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить список элементов в localStorage? Бобр Общие вопросы Javascript 8 17.09.2013 14:32
Как изменить background всех дочерних элементов внутри <div>? libinstyle Общие вопросы Javascript 2 24.03.2010 13:25
Как прочитать список имён элементов в Cookie? Бобр Общие вопросы Javascript 6 09.02.2010 08:47
как записать id всех элементов в массив? SunYang Общие вопросы Javascript 21 06.02.2010 22:50
Как снять фокус со всех элементов? Logo Общие вопросы Javascript 7 02.07.2009 23:53