Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 07.01.2013, 03:24
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Не хватает кавычки
11 str+='<p class="item-'+i+'-'+arItem[j]+'">'+zJ[j]+'</p>\n
Ответить с цитированием
  #12 (permalink)  
Старый 07.01.2013, 03:25
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от mi.rafaylik
Весело мне будет, когда после внесения изменений я буду обратно в строку куки эти данные собирать .
Нет смысла собирать в куки - собирайте в длинную строку и Отправляйте Аяксом(*если не будет перехода на страницу - а если будет - чисто в скрытую форму
Ответить с цитированием
  #13 (permalink)  
Старый 07.01.2013, 07:02
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

не в том суть повторного сбора в строку.
Данные отправляются не скрытым полем, а обычным через $_POST.
Мне нужно повторно собрать данные в строку для случая, если пользователь решит не отправлять форму, а вернётся в магазин и продолжит добавлять товары. Тогда произойдёт переход на другую страницу, и изменённые данные (например удаление какого-нибудь из товаров) не сохранятся.
Поэтому по событию нажатия любой кнопки удаления товара я собираю массивы в строку в то же состояние, из которого я их и доставал. такая вот камасутра )
Но сначала нужно поспать ))

Слегка изменил функцию разбора строки в массивы (в основном я поменял местами элементы массива, добавил комментарии между элементами и вывод новой суммы если к примеру количество больше одного):
var a = $.cookie("basket");
var b = a.replace(/;\s*$/,'').split(";");
function allItemsListConstruct (Z) {
	var str ='',zJ;
		for (var i=0; i<Z.length; i++){
			str+='<div>\r\n';
			zJ = Z[i].split(":");
			var itemPriceFinal = zJ[2] * zJ[1];
			str+=
			'<p class="item-name">'+zJ[0]+'</p> ('+
			'<p class="item-size">'+zJ[3]+'</p> '+
			'<p class="item-color">'+zJ[4]+'</p> '+
			'<p class="item-price">'+zJ[2]+'</p> грн.) - '+
			'<p class="item-copy">'+zJ[1]+'</p> шт. (' +
			'<p class="item-price-final">'+itemPriceFinal+'</p> грн.)'
			;
			str+='\r\n</div>\r\n'
		} return str;
}
var allItemsList = allItemsListConstruct (b);

Последний раз редактировалось mi.rafaylik, 07.01.2013 в 13:56.
Ответить с цитированием
  #14 (permalink)  
Старый 07.01.2013, 13:51
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от mi.rafaylik
(например удаление какого-нибудь из товаров) не сохранятся.
Это однозначно LocalStorage

function setValue(key,Value) {
    localStorage.setItem(key,Value)
alert('Записалось ... \n' + key+':'+Value)
}
//Записываем Данные
var   key='price', Value='Цена2';
setValue(key,Value)
var   key='size', Value='600'
setValue(key,Value)


function getValue(key) {
    return localStorage.getItem(key);;
}
//Читаем Данные
var   key='price';
alert(key+"="+getValue(key));
var   key='size';
alert(key+"="+getValue(key));

Можно перезагрузить страницу и запустить второй скрипт

Последний раз редактировалось Deff, 07.01.2013 в 15:31.
Ответить с цитированием
  #15 (permalink)  
Старый 07.01.2013, 15:59
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

Всё же я хочу сначала попробовать способ сбора массива в строку, т.к. данных будет немного (максимум 10 товаров, в записанном куки это не превысит и килобайта я думаю).
P.S. это не товары в магазине, а уже выбранные покупателем товары в корзине, поэтому длина строки будет небольшая.

Вот то, из чего я буду собирать в строку:
<div class="item">
<p class="item-array item-name">T-Shirt</p>
<p class="item-array item-size">размер S</p>
<p class="item-array item-color">цвет белый</p>
<p class="item-array item-price">170</p> грн.
<p class="item-array item-copy">4</p> шт.
</div>

<div class="item">
<p class="item-array item-name">Jeans</p>
<p class="item-array item-size">размер XS</p>
<p class="item-array item-color">цвет синий</p>
<p class="item-array item-price">420</p> грн.
<p class="item-array item-copy">2</p> шт.
</div>

и начало моих размышлений:
basketNew = new Array ($('.item-array').text()); // создание массива из элементов класса
// $.cookie("basket", basketNew); // запись в куки

Но массив не получился, т.к. данные просто склеились. Выглядит это вот так:
T-Shirtразмер Sцвет белый1704Jeansразмер XSцвет синий4202

а должно так, где элементы каждого товара разделены двоеточием, а товары разделены точкой с запятой:
T-Shirt:размер S:цвет белый:170:4;Jeans:размер XS:цвет синий:420:2;

То есть нужно создать массив из всех <div class="item"></div> с разделителем ";",
в каждом из которых будет массив из дочерних <p class="item-array item-price"></p> с разделителем ":".

Последний раз редактировалось mi.rafaylik, 07.01.2013 в 17:20.
Ответить с цитированием
  #16 (permalink)  
Старый 07.01.2013, 17:06
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от mi.rafaylik
то есть в localStorage записывается не один массив со всеми товарами, а значение каждого указанного мной элемента (если он изменён) ?
Ну вы ведь кликаете по каждому товару ?

А для сбора всего массива и отсылки суммарного на сервер или перепарса на странице - есть методы доступа к localStorage
Либо пишите/читает строку в один ключ
По ключам (по опыту удобнее)
В Один ключ - это подобие куков, но каждый раз при добавке - смене товара придется распаковывать данные, (в куках таже проблема, с заменой - добавкой товара,
Сбор по ключам и объединение для отсылки или распарса на странице
(- ксать для распарса на очередной странице - даже не надо объединять,
Главное чтобы нулевой ключ(заранее известный) - имел массив всех ключей, нужных для перебора

Последний раз редактировалось Deff, 07.01.2013 в 17:27.
Ответить с цитированием
  #17 (permalink)  
Старый 07.01.2013, 17:48
Новичок на форуме
Отправить личное сообщение для jokersoft Посмотреть профиль Найти все сообщения от jokersoft
 
Регистрация: 07.01.2013
Сообщений: 2

ТЗ нечеткое.
Я так понял, в итоге нужна строка, а не массив. Хотя я советовал бы думать о будущем и о юзабилити. И оперировать таки с массивом, а не со строкой. Но ладно, пусть будет строка.
Итак, пишем сразу строку

var str = ''; //инициализируем пустую строку

$('div.item').each(function(){
$(this).children('p').each(function(){
str += $(this).html() + ":";//пишем хар-ку товара + ":"
});
str += ";"//отделяем товар + ";"
});

ЗЫ: да, знаю, в конце будем получать не ";", а ":;", но если дальше правильно парсить - не имеет значения и не стоит лишней строки кода здесь.
Ответить с цитированием
  #18 (permalink)  
Старый 07.01.2013, 17:54
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

jokersoft,
Cобствна вопрос - (не юзал jQuery.cocie)
Во всех ли браузерах воспринимает произвольные символы в данных для куков (В обычных куках, к примеру - русские(в FF) не воспринимаются, перевод в ескейп последовательность - может превысить длину кука в ИЕ(она возрастет примерно раза в 4

Последний раз редактировалось Deff, 07.01.2013 в 17:56.
Ответить с цитированием
  #19 (permalink)  
Старый 07.01.2013, 18:18
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

Адаптировал код jokersoft:
var strCookie = ''; //инициализируем пустую строку

$('div.item').each(function(){
	$(this).children('p:eq(0)').each(function(){ strCookie += $(this).html() + ":"; }); // количество характеристик всегда будет 5
	$(this).children('p:eq(1)').each(function(){ strCookie += $(this).html() + ":"; });
	$(this).children('p:eq(2)').each(function(){ strCookie += $(this).html() + ":"; });
	$(this).children('p:eq(3)').each(function(){ strCookie += $(this).html() + ":"; });
	$(this).children('p:eq(4)').each(function(){ strCookie += $(this).html(); }); // таким образом я убрал последний ":" в каждом товаре
	strCookie += ";" //отделяем товар + ";"
});

Результат получился такой:
T-Shirt:размер S:цвет белый:170:4;;;Jeans:размер XS:цвет синий:420:2;;;Shoes:размер 41:цвет хаки:560:1;;;

Это работает, но лишние разделители при следующих запросах строки из куки будут создавать пустые товары..
Сейчас после каждого товара разделитель не один ";" а их столько, сколько и товаров всего :/
Подскажите как правильно парсить, чтобы привести строку в такой вид:
T-Shirt:размер S:цвет белый:170:4;Jeans:размер XS:цвет синий:420:2;Shoes:размер 41:цвет хаки:560:1;

P.S. в следующих сообщениях уже исправил )

Последний раз редактировалось mi.rafaylik, 07.01.2013 в 19:02.
Ответить с цитированием
  #20 (permalink)  
Старый 07.01.2013, 18:24
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

mi.rafaylik,
1. Составьте список используемых браузеров( с версиями для ИЕ
2. Приведите полный вид максимально длинной строки заказов отправляемой на сервер
3. Если использовать не куки - то способ отправки через форму - подойдёт ?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сохранить переменную в куки tasha_mille Events/DOM/Window 2 02.07.2012 14:29
Помогите с кодом сохранения параметром CheckBox-ов в куки Konstantine jQuery 0 26.05.2012 16:20
Ext.util.Cookies.set(...) - несколько переменных в одной куки. potkin ExtJS 4 07.05.2012 10:43
Разделение строки по последнему повторяющемуся символу ansi_str Общие вопросы Javascript 3 27.04.2012 23:27
Одно событие во всех окнах одного домена kdn1990 Events/DOM/Window 18 25.04.2012 20:11