Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Обработка события с Local Storage (https://javascript.ru/forum/events/31179-obrabotka-sobytiya-s-local-storage.html)

taobo 29.08.2012 12:03

Обработка события с Local Storage
 
Добрый день,

пользуюсь плагином jquery.storage. Сделал, чтобы данные записывались с LocalStorage по клику и извлекались из него по клику - вообщем, "избранное" получилось: все заносится и извлекается. Но есть проблема, DOM с избранным из Local Storage не заполняется, пока страницу не обновишь. Т.е. при первом вызове показывает пустой дом, а если страницу обноввить, то заполняет DOM. Где-то накосячил с событиями. Но в силу слабого знакомства с js разобраться не могу. Буду рад помощи.

В коде есть пометки:
$(document).ready(function(){ //ждем когда все подгрузится
$("#myfavor").click(function(){ //если жамкнули на myfavor
	var pr = $("#pr_name").attr("rel"); // pr = name==url; //смотрим rel у ссылки и заносим все это дело в Local Storage
		if (pr) {
			var my_favor = $.Storage.get('my_favor');
			if (!my_favor) { my_favor = ""; }
				
	/* обрезаем длинную строку 
				
			var pr_len = my_favor.length;	
			if (pr_len > 700) {
				my_favor = my_favor.substr(0,700);
			}
				
	/* узнаём последний просмотренный 
				
			crnt = pr.split('==');
			crnt = crnt[1]; //url текущего товара
				
			lst = my_favor.split("||");
			lst = lst[0]; // первый элемент
			lst = lst.split("==");
			lst = lst[1]; // url последнего просмотренного
				
			if (lst != crnt) {
				my_favor = pr + "||" + my_favor;
				$.Storage.set( 'my_favor', my_favor);		
			}
		}
});	
	/* последние просмотренные: результаты для избранного 
	
		$("#my_favor_show").html("<ul></ul>"); //в этом div будет выводится содержание из Local Storage
		var my_favor = $.Storage.get('my_favor');
		my_favor = my_favor.split("||");
		var res = 0;

		$.each(my_favor, function(){
		if ( res > '7' ) { return false; } /* счётчик 
		crnt = $(this)[0].split("==");
		if ( !crnt[1] ) { return false; }
		$("#my_favor_show ul").append("<li class='bit'><p class='aboutseller'><a class='fotofactory' href='/" + crnt[1] + "'>" + crnt[0] + "</a></p></li>");
		res += 1;
		});
	return false;

	
});

Deff 29.08.2012 12:38

Не наю = мож так ?
$(document).ready(function(){ //ждем когда все подгрузится
$("#myfavor").click(function(){ //если жамкнули на myfavor
	var pr = $("#pr_name").attr("rel"); // pr = name==url; //смотрим rel у ссылки и заносим все это дело в Local Storage
		if (pr) {
			var my_favor = $.Storage.get('my_favor');
			if (!my_favor) { my_favor = ""; }
				
	/* обрезаем длинную строку 
				
			var pr_len = my_favor.length;	
			if (pr_len > 700) {
				my_favor = my_favor.substr(0,700);
			}
				
	/* узнаём последний просмотренный 
				
			crnt = pr.split('==');
			crnt = crnt[1]; //url текущего товара
				
			lst = my_favor.split("||");
			lst = lst[0]; // первый элемент
			lst = lst.split("==");
			lst = lst[1]; // url последнего просмотренного
				
			if (lst != crnt) {
				my_favor = pr + "||" + my_favor;
				$.Storage.set( 'my_favor', my_favor);		
			}
		}
		SetMy_favor_show ()
});	
	/* последние просмотренные: результаты для избранного 
function SetMy_favor_show (){

		$("#my_favor_show").html("<ul></ul>"); //в этом div будет выводится содержание из Local Storage
		var my_favor = $.Storage.get('my_favor');
		my_favor = my_favor.split("||");
		var res = 0;

		$.each(my_favor, function(){
		if ( res > '7' ) { return false; } /* счётчик 
		crnt = $(this)[0].split("==");
		if ( !crnt[1] ) { return false; }
		$("#my_favor_show ul").append("<li class='bit'><p class='aboutseller'><a class='fotofactory' href='/" + crnt[1] + "'>" + crnt[0] + "</a></p></li>");
		res += 1;
		});
	return false;

} SetMy_favor_show ()	
});

taobo 29.08.2012 13:09

нет, так он без перезагрузки страницы не хочет вообще "избранное" открывать. Может в этом проблема - у меня избранное открывается как модальное окно:
<a data-toggle="modal" data-target="#favorites" href="javascript:;" id="show_my_favor">Список желанных товаров</a>

Deff 29.08.2012 13:30

taobo,
Короче нужно после записи по клику - заново вызывать функцию открытия избранного

taobo 29.08.2012 13:34

Цитата:

Сообщение от Deff (Сообщение 201375)
taobo,
Короче нужно после записи по клику - заново вызывать функцию открытия избранного

В том смысле, что вызывать функцию загрузки избранного? Это имелось в виду?

открытие избранного происходит вручную (тоже по клику). А вот построение его DOM (с записью из Local Storage) происходит (по задумке) когда документ загрузился.

Deff 29.08.2012 14:13

Цитата:

Сообщение от taobo
открытие избранного происходит вручную (тоже по клику). А вот построение его DOM (с записью из Local Storage) происходит (по задумке) когда документ загрузился.

Ну занчит объединяйте и делайте всё по клику подгрузку и построение - либо построение, каждый раз вызывайте после очередного клика для записи в стораге(помимо построения при загрузке страницы

taobo 29.08.2012 14:36

Спасибо вам за помощь!

Сделал: загрузка в DOM из LS по готовности модального окна. Работает. Еще раз спасибо.


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