Javascript.RU

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

Отправка данных из корзины
Хочу создать отдельную страничку. На которую будет заходить по клику, оформить заказ. Там нужно буддет ввести имя, фамилию, например способ оплаты выбрать, и способ доставки, а так же мыло. И чтобы оно либо на почту(Так прощу) Или на сервер(так сложнее) Отправляло данные. То что он выбрал в корзине+ его данные. Это реально сделать даже используя пхп?
<script>
(function(e){ 
 e.closest = e.closest || function(css){ 
   var node = this;
  
   while (node) { 
      if (node.matches(css)) return node; 
      else node = node.parentElement; 
   } 
   return null; 
 } 
})(Element.prototype);
var d = document,
    itemBox = d.querySelectorAll('.item_box'), // блок каждого товара
    cartCont = d.getElementById('cart_content'); // блок вывода данных корзины
// Функция кроссбраузерной установка обработчика событий
function addEvent(elem, type, handler) {
    if (elem.addEventListener) {
        elem.addEventListener(type, handler, false);
    } else {
        elem.attachEvent('on' + type, function() {
            handler.call(elem);
        });
    }
    return false;
}
// Получаем данные из LocalStorage
function getCartData() {
    return JSON.parse(localStorage.getItem('cart'));
}
// Записываем данные в LocalStorage
function setCartData(o) {
    localStorage.setItem('cart', JSON.stringify(o));
    return false;
}
// Добавляем товар в корзину
function addToCart(e) {
    this.disabled = true; // блокируем кнопку на время операции с корзиной
    var cartData = getCartData() || {}, // получаем данные корзины или создаём новый объект, если данных еще нет
        parentBox = this.parentNode, // родительский элемент кнопки "Добавить в корзину"
        itemId = this.getAttribute('data-id'), // ID товара
        itemTitle = parentBox.querySelector('.item_title').innerHTML, // название товара
        itemPrice = parentBox.querySelector('.item_price').innerHTML, // стоимость товара
                                itemAmount = +(parentBox.querySelector('.amount').value || 1); // Кол-во
                if (!itemId) {
                        var param = parentBox.querySelector('input[type=radio]:checked');
                        if (!param) {
                                alert('Выберите тип товара');
                                return false;
                        }
                        itemId = param.value;
                        itemTitle += ' (' + param.getAttribute('data-param') + ')';                     
                }
                /* ------------- */
    if (cartData.hasOwnProperty(itemId)) {
        cartData[itemId][2] += itemAmount; // Тут подставили переменную и если тексбокс пуст, то +1
    } else {
        cartData[itemId] = [itemTitle, itemPrice, itemAmount]; // И  тут подставили переменную
    }
    if (!setCartData(cartData)) { // Обновляем данные в LocalStorage
        this.disabled = false; // разблокируем кнопку после обновления LS
    }
    var cartData = getCartData(), // вытаскиваем все данные корзины
        totalItems = '',
        totalCount = 0,
        totalSum = 0;
    // если что-то в корзине уже есть, начинаем формировать данные для вывода
    if (cartData !== null) {
        totalItems = '<table class="shopping_list"><tr><th>Наименование</th><th>Цена</th><th>Кол-во</th><th></th></tr>';
        for (var items in cartData) {
            totalItems += '<tr>';
            for (var i = 0; i < cartData[items].length; i++) {
                if (i == 1) {
                    totalItems += '<td align="right">' + cartData[items][i] + '</td>';
                } else {
                    totalItems += '<td>' + cartData[items][i] + '</td>';
                };
            }
            totalSum += cartData[items][1] * cartData[items][2];
            totalCount += cartData[items][2];
            totalItems += '<td><span class="del_item" data-id="' + items + '"></span></td>';
            totalItems += '</tr>';
        }
        totalItems += '<tr><td><strong>Итого</strong></td><td align="right"><span id="total_sum">' + totalSum + '</span>$</td><td><span id="total_count">' + totalCount + '</span> шт.</td><td></td></tr>';
        totalItems += '</table>';
        cartCont.innerHTML = totalItems;
    } else {
        cartCont.innerHTML = 'В корзине пусто!';
    }
    return false;
}
// Устанавливаем обработчик события на каждую кнопку "Добавить в корзину"
for (var i = 0; i < itemBox.length; i++) {
    addEvent(itemBox[i].querySelector('.add_item'), 'click', addToCart);
}
// Открываем корзину со списком добавленных товаров
function openCart(e) {
    var cartData = getCartData(), // вытаскиваем все данные корзины
        totalItems = '',
        totalCount = 0,
        totalSum = 0;
    // если что-то в корзине уже есть, начинаем формировать данные для вывода
    if (cartData !== null) {
        totalItems = '<table class="shopping_list"><tr><th>Наименование</th><th>Цена</th><th>Кол-во</th><th></th></tr>';
        for (var items in cartData) {
            totalItems += '<tr>';
            for (var i = 0; i < cartData[items].length; i++) {
                if (i == 1) {
                    totalItems += '<td align="right">' + cartData[items][i] + '</td>';
                } else {
                    totalItems += '<td>' + cartData[items][i] + '</td>';
                };
            }
            totalSum += cartData[items][1] * cartData[items][2];
            totalCount += cartData[items][2];
            totalItems += '<td><span class="del_item" data-id="' + items + '"></span></td>';
            totalItems += '</tr>';
        }
        totalItems += '<tr><td><strong>Итого</strong></td><td align="right"><span id="total_sum">' + totalSum + '</span>$</td><td><span id="total_count">' + totalCount + '</span> шт.</td><td></td></tr>';
        totalItems += '</table>';
        cartCont.innerHTML = totalItems;
    } else {
        cartCont.innerHTML = 'В корзине пусто!';
    }
    return false;
}
/* Открыть корзину */
addEvent(d.getElementById('checkout'), 'click', openCart);
/* Очистить корзину */
addEvent(d.getElementById('clear_cart'), 'click', function(e) {
    localStorage.removeItem('cart');
    cartCont.innerHTML = 'Корзина очишена.';
});
[].forEach.call(document.querySelectorAll('.item_box input[type=radio]'), function(inp){
        addEvent(inp, 'change', function(){
                var parentBox = this.closest('.item_box');
                parentBox.querySelector('.item_price').textContent = this.getAttribute('data-price');
                parentBox.querySelector('.amount').value = 1;
        })
});
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 12.05.2016, 09:43
Интересующийся
Отправить личное сообщение для dunakov Посмотреть профиль Найти все сообщения от dunakov
 
Регистрация: 12.05.2016
Сообщений: 22

HTML Часть

!doctype html>
<html>
<head>
      <meta charset="utf-8">
      <title>Пример корзины</title>
      <style type="text/css">
.item_box {
  width: 200px;
  padding: 5px;
  border: solid 1px black;
  float: left;
  position: relative;
  top: 10px;
}
.buttons {
  padding: 5px;
  border: solid 1px black;
  float: rigth;
  position: absolute;
  top: 500px;
  left: 40%;
}
.cart_content {
  padding: 5px;
  border: solid 1px black;
  float: rigth;
  position: absolute;
  top: 600px;
  left: 40%;
}
</style>
</head>
<body>
<div class="item_box">
        <h3 class="item_title">Flash Kingston 50 mb</h3>
  <p>Выберите объём флеш-накопителя</p>
  <p><input name="val1" type="radio" data-price="18" data-param="8 GB" value="7" checked> 8 GB</p>
  <p><input name="val1" type="radio" data-price="20" data-param="16 GB" value="8"> 16 GB</p>
  <p><input name="val1" type="radio" data-price="22" data-param="32 GB" value="9"> 32 GB</p>
  <p><input name="val1" type="radio" data-price="24" data-param="64 GB" value="10"> 64 GB</p>
  <!--p><input type="submit" value="Выбрать"></p-->
  <p>Укажите количество:</p>
  <p><input class="amount" value="1" size="5" maxlength="3"></p>
  <p>Цена: <span class="item_price">18</span>$</p>
  <button class="add_item">Добавить в корзину</button>
</div>
<div class="item_box">
        <h3 class="item_title">Mouse Razer V3</h3>
  <p>Укажите количество:</p>
  <p><input class="amount" value="1" size="5" maxlength="3"></p>
  <p>Цена: <span class="item_price">43</span>$</p>
  <button class="add_item" data-id="11">Добавить в корзину</button>
</div>
<div class="item_box">
        <h3 class="item_title">Flash ADATA 32 mb/40 mb</h3>
  <p>Выберите объём флеш-накопителя</p>
  <p><input name="val2" type="radio" data-price="24" data-param="8 GB" value="12" checked> 8 GB</p>
  <p><input name="val2" type="radio" data-price="26" data-param="16 GB" value="13"> 16 GB</p>
  <p><input name="val2" type="radio" data-price="30" data-param="32 GB" value="14"> 32 GB</p>
  <p><input name="val2" type="radio" data-price="32" data-param="64 GB" value="15"> 64 GB</p>
  <!--p><input type="submit" value="Выбрать"></p-->
  <p>Укажите количество:</p>
  <p><input class="amount" value="1" size="5" maxlength="3"></p>
  <p>Цена: <span class="item_price">24</span>$</p>
  <button class="add_item">Добавить в корзину</button>
</div>
<div class="item_box">
        <h3 class="item_title">LAN Hub  10 ports</h3>
  <p>Укажите количество:</p>
  <p><input class="amount" value="1" size="5" maxlength="3"></p>
  <p>Цена: <span class="item_price">44</span>$</p>
  <button class="add_item" data-id="16">Добавить в корзину</button>
</div>
<div class="item_box">
        <h3 class="item_title">Router D-Ling 100 mb/s 4 ports</h3>
  <p>Укажите количество:</p>
  <p><input class="amount" value="1" size="5" maxlength="3"></p>
  <p>Цена: <span class="item_price">11</span>$</p>
  <button class="add_item" data-id="17">Добавить в корзину</button>
</div>
<div class="item_box">
        <h3 class="item_title">Local Cabel</h3>
  <p>Выберите длину кабеля</p>
  <p><input name="length" type="radio" data-price="38" data-param="50 метров" value="18" checked> 50 метров</p>
  <p><input name="length" type="radio" data-price="41" data-param="100 Метров" value="19"> 100 Метров</p>
  <p><input name="length" type="radio" data-price="43" data-param="150 метров" value="20"> 150 метров</p>
  <!--p><input type="submit" value="Выбрать"></p><p>Укажите длину:</p-->
  <p><input class="amount" value="1" size="5" maxlength="3"></p>
  <p>Цена: <span class="item_price">30</span>$</p>
  <button class="add_item">Добавить в корзину</button>
</div>
<div class="item_box">
        <h3 class="item_title">Клавиатура Logitech 23215hs2</h3>
  <p>Укажите количество:</p>
  <p><input class="amount" value="1" size="5" maxlength="3"></p>
  <p>Цена: <span class="item_price">5</span>$</p>
  <button class="add_item" data-id="21">Добавить в корзину</button>
</div>
<div class="buttons">
        <button id="checkout">Оформить заказ</button>
  <button id="clear_cart">Очистить корзину</button>
</div>
<div class="cart_content">
        <div id="cart_content"></div>
</div>
Ответить с цитированием
  #3 (permalink)  
Старый 12.05.2016, 10:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от dunakov
И чтобы оно либо на почту(Так прощу)
То есть минуя сервер бог знает что и от кого? "Простят" ли вас пользователи? )

Цитата:
Или на сервер(так сложнее) Отправляло данные.
Сложнее чем?

Вопрос попутно - к примеру вы живете за мкадом, а по рекламе магазина расположенного в центре, мол есть "супер пупер", долго добираетесь к ним, а вам - "Извините, только что забрали последний пупер". Каково будет ваше состояние?

Если "плохо, хреново, убил бы, ...", то почему вы, хрен с ним, пусть наполняете корзину не извещая сервер о выбранном товаре, при этом не извещаете клиента все ли выбранное на данный момент есть, хотя бы тогда когда он оформляет заказ?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка данных формы. Как выглядит структура метода с AJAX (по JQuery)? Coriolan161 AJAX и COMET 5 24.11.2015 20:17
Ajax отправка данных Serhiy AJAX и COMET 0 29.01.2014 19:03
Простейшая отправка данных на сервер и вывод MBmusic AJAX и COMET 12 23.09.2013 12:35
отправка данных из формы и вывод полученных данных sxe jQuery 2 21.05.2013 00:34
Двойная Фильтрация данных таблицы David0707 Общие вопросы Javascript 0 19.03.2012 13:00