Не хватает кавычки
11 str+='<p class="item-'+i+'-'+arItem[j]+'">'+zJ[j]+'</p>\n |
Цитата:
|
не в том суть повторного сбора в строку.
Данные отправляются не скрытым полем, а обычным через $_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); |
Цитата:
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)); Можно перезагрузить страницу и запустить второй скрипт |
Всё же я хочу сначала попробовать способ сбора массива в строку, т.к. данных будет немного (максимум 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> с разделителем ":". |
Цитата:
А для сбора всего массива и отсылки суммарного на сервер или перепарса на странице - есть методы доступа к localStorage Либо пишите/читает строку в один ключ По ключам (по опыту удобнее) В Один ключ - это подобие куков, но каждый раз при добавке - смене товара придется распаковывать данные, (в куках таже проблема, с заменой - добавкой товара, Сбор по ключам и объединение для отсылки или распарса на странице (- ксать для распарса на очередной странице - даже не надо объединять, Главное чтобы нулевой ключ(заранее известный) - имел массив всех ключей, нужных для перебора |
ТЗ нечеткое.
Я так понял, в итоге нужна строка, а не массив. Хотя я советовал бы думать о будущем и о юзабилити. И оперировать таки с массивом, а не со строкой. Но ладно, пусть будет строка. Итак, пишем сразу строку var str = ''; //инициализируем пустую строку $('div.item').each(function(){ $(this).children('p').each(function(){ str += $(this).html() + ":";//пишем хар-ку товара + ":" }); str += ";"//отделяем товар + ";" }); ЗЫ: да, знаю, в конце будем получать не ";", а ":;", но если дальше правильно парсить - не имеет значения и не стоит лишней строки кода здесь. |
jokersoft,
:) Cобствна вопрос - (не юзал jQuery.cocie) Во всех ли браузерах воспринимает произвольные символы в данных для куков (В обычных куках, к примеру - русские(в FF) не воспринимаются, перевод в ескейп последовательность - может превысить длину кука в ИЕ(она возрастет примерно раза в 4 |
Адаптировал код 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,
1. Составьте список используемых браузеров( с версиями для ИЕ 2. Приведите полный вид максимально длинной строки заказов отправляемой на сервер 3. Если использовать не куки - то способ отправки через форму - подойдёт ? |
Часовой пояс GMT +3, время: 04:42. |