Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.08.2015, 11:55
Кандидат Javascript-наук
Отправить личное сообщение для ligisayan Посмотреть профиль Найти все сообщения от ligisayan
 
Регистрация: 19.06.2015
Сообщений: 114

Почему перезаписываются данные только первого элемента?
Всем привет. Есть магазин с товарными секциями - пример в коде. При добавлении товара в корзину происходит пересчет количества товара и его суммы. Для одного товара все считает хорошо, но как только добавляю второй со своими данными - корзина перезаписывает данные только первого, т.е. в итоговой сумме получается цена одного первого продукта, несмотря на то, что в корзине их больше. Вопрос по сохранению данных корзины и их последующему извлечению. Сохраняю данные в массиве, прохожусь по всем элементам с помощью each но что-то не получается правильно перезаписать.. Условие
if ($(this).find('a').attr('href') == product_name) {..}

как я понял срабатывает для всех товаров в корзине или я не прав?
$('.add_to_cart_button').click(function() {
    var number = $(this).parents('.product-frame ').find(".input-text.qty.text").val();
    var product_name = $(this).parents('.product-frame ').find('.product-section h3 a').attr('href');
    $('body').bind('added_to_cart', function() {
      var arr = [];
      $('#shopping-button .cart_list li').each(function(i) {
        arr[i] = $(this).find("span.quantity").text().match(/\d+(?:\.\d+)?/g);
        if ($(this).find('a').attr('href') == product_name) {
          var html = $(this).find("span.quantity").html();
          html = html.replace(/\d+/, number);
          $(this).find("span.quantity").html(html);
          var quantity = $(this).find("span.quantity").text().match(/\d+(?:\.\d+)?/g);
          var basePrice = "";
          for (var i = 1; i < quantity.length; i++) {
            basePrice += quantity[i];
          }
          $(this).parents('#shopping-button').find(".shopping-button .amount").text((basePrice * number) + " руб.");
        }
      });
      console.log(arr);
    });
  });

<!-- Добавление товара в корзину -->
<div class="product-frame ">
  <div class="content-description">
    <div class="product-section">
      <h3><a href="#">Товар 1</a></h3>
      <table class="description-table">
        <tbody>
          <tr>
            <td class="product-quantity">
              <div class="quantity buttons_added">
                <input type="number" step="1" min="1" max="27" id="num_count" name="quantity" value="1" title="Кол." class="input-text qty text" size="4">
                <input type="button" value="+1" id="button_plus" class="plus">
                <input type="button" value="-1" id="button_minus" class="minus">
              </div>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
  <div class="process-section">
    <div class="price"><span class="amount" baseprice="360000">1.080.000 руб.</span>
    </div>
    <a href="#" rel="nofollow" data-product_id="3295" data-quantity="1" class="button add_to_cart_button">Купить</a> 
  </div>
</div>

<!-- Сама корзина -->
<li id="shopping-button">
<a class="shopping-button" href="#">
	<b><span class="amount">360.000 руб.</span></b>
</a>
  <ul class="cart_list ">
    <li>
      <a href="#">
        <img width="60" height="60" src="#" class="attachment-60x60 wp-post-image" alt="item-1">
      </a>
      <div class="product-text">
        <div class="product-name">Товар 1</div>
        <span class="quantity">3 × <span class="amount">360.000&nbsp;руб.</span></span>
      </div>
    </li>
    <li>
      <a href="#">
        <img width="60" height="60" src="#" class="attachment-60x60 wp-post-image" alt="item-2">
      </a>
      <div class="product-text">
        <div class="product-name">тОВАР 2</div>
        <span class="quantity">3 × <span class="amount">150.000&nbsp;руб.</span></span>
      </div>
    </li>
  </ul>
  <!-- end product list -->
</li>

Последний раз редактировалось ligisayan, 06.08.2015 в 14:07.
Ответить с цитированием
  #2 (permalink)  
Старый 06.08.2015, 12:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

ligisayan,
attr('href') у вас везде # ???product_name= "#"
Ответить с цитированием
  #3 (permalink)  
Старый 06.08.2015, 13:07
Кандидат Javascript-наук
Отправить личное сообщение для ligisayan Посмотреть профиль Найти все сообщения от ligisayan
 
Регистрация: 19.06.2015
Сообщений: 114

Сообщение от рони Посмотреть сообщение
ligisayan,
attr('href') у вас везде # ???product_name= "#"
рони ну, не буду же я указывать везде ссылки по 2 строки - можно заменить # на vk.com/1 vk.com/2 - сути это не изменит, с ссылками проблем нет.
Ответить с цитированием
  #4 (permalink)  
Старый 06.08.2015, 13:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

ligisayan,
строка 4 не на своём месте
Сообщение от ligisayan
$('body').bind('added_to_cart', function
при каждом клике вы увеличиваите количество обработок

строка 17 скрипта отсутствует в html указанный элемент
(".shopping-button .amount").

да и непонятно что делают строки 12 - 16 - извлекают цифру? -- а если неизвлекут?
i немноговато ?
Ответить с цитированием
  #5 (permalink)  
Старый 06.08.2015, 14:10
Кандидат Javascript-наук
Отправить личное сообщение для ligisayan Посмотреть профиль Найти все сообщения от ligisayan
 
Регистрация: 19.06.2015
Сообщений: 114

Сообщение от рони Посмотреть сообщение
ligisayan,
строка 4 не на своём месте
при каждом клике вы увеличиваите количество обработок

строка 17 скрипта отсутствует в html указанный элемент
(".shopping-button .amount").

да и непонятно что делают строки 12 - 16 - извлекают цифру? -- а если неизвлекут?
i немноговато ?
да, возможно i многовато - удалил.
строка 17 - добавил недостающий элемент
12-16 - да, извлекают и перезаписывают потом сюда:
$(this).parents('#shopping-button').find(".shopping-button .amount").text((basePrice * number) + " руб.");
Ответить с цитированием
  #6 (permalink)  
Старый 06.08.2015, 16:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

ligisayan, изменить количество в одном из инпутов - нажать купить под ним
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">

  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
$(function() {
    var product_name, number;
    $("body").on("added_to_cart", function() {
        var arr = [];
        $("#shopping-button .cart_list li").each(function(i) {
            var span = $(this).find("span.quantity");
            arr[i] = span.text().match(/\d+(?:\.\d+)?/g);
            if ($(this).find("a").attr("href") == product_name) {
                arr[i][0] = number;
                span.html(arr[i][0] + "\u00d7 <span class='amount'>" + arr[i][1] + "&nbsp;\u0440\u0443\u0431.</span>");
                $(this).parents("#shopping-button").find(".shopping-button .amount").text((arr[i][0] * arr[i][1]).toFixed(3) + " руб.")
            }
        })
    });
    $(".add_to_cart_button").click(function(event) {
        event.preventDefault();
        number = $(this).parents(".product-frame ").find(".input-text.qty.text").val();
        product_name = $(this).parents(".product-frame ").find(".product-section h3 a").attr("href");

        $("body").trigger("added_to_cart")
    })
});


  </script>
</head>

<body>  <!-- Добавление товара в корзину -->
<div class="product-frame ">
  <div class="content-description">
    <div class="product-section">
      <h3><a href="Товар 1">Товар 1</a></h3>
      <table class="description-table">
        <tbody>
          <tr>
            <td class="product-quantity">
              <div class="quantity buttons_added">
                <input type="number" step="1" min="1" max="27" id="num_count" name="quantity" value="1" title="Кол." class="input-text qty text" size="4">
                <input type="button" value="+1" id="button_plus" class="plus">
                <input type="button" value="-1" id="button_minus" class="minus">
              </div>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
  <div class="process-section">
    <div class="price"><span class="amount" baseprice="360000">1.080.000 руб.</span>
    </div>
    <a href="#" rel="nofollow" data-product_id="3295" data-quantity="1" class="button add_to_cart_button">Купить</a>
  </div>
</div>
<div class="product-frame ">
  <div class="content-description">
    <div class="product-section">
      <h3><a href="Товар 2">Товар 2</a></h3>
      <table class="description-table">
        <tbody>
          <tr>
            <td class="product-quantity">
              <div class="quantity buttons_added">
                <input type="number" step="1" min="1" max="27" id="num_count" name="quantity" value="1" title="Кол." class="input-text qty text" size="4">
                <input type="button" value="+1" id="button_plus" class="plus">
                <input type="button" value="-1" id="button_minus" class="minus">
              </div>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
  <div class="process-section">
    <div class="price"><span class="amount" baseprice="360000">1.080.000 руб.</span>
    </div>
    <a href="#" rel="nofollow" data-product_id="3295" data-quantity="1" class="button add_to_cart_button">Купить</a>
  </div>
</div>
<!-- Сама корзина -->
<li id="shopping-button">
  <a class="shopping-button" href="#">
	<b><span class="amount">360.000 руб.</span></b>
</a>
  <ul class="cart_list ">
    <li>
      <a href="Товар 1">
        <img width="60" height="60" src="#" class="attachment-60x60 wp-post-image" alt="item-1">
      </a>
      <div class="product-text">
        <div class="product-name">Товар 1</div>
        <span class="quantity">3 × <span class="amount">360.000&nbsp;руб.</span></span>
      </div>
    </li>
    <li>
      <a href="Товар 2">
        <img width="60" height="60" src="#" class="attachment-60x60 wp-post-image" alt="item-2">
      </a>
      <div class="product-text">
        <div class="product-name">Товар 2</div>
        <span class="quantity">3 × <span class="amount">150.000&nbsp;руб.</span></span>
      </div>
    </li>
  </ul>
  <!-- end product list -->
</li>



</body>

</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jquery для placeholder работает только для первого input в ie Nailya jQuery 1 13.05.2014 09:57
сэмулировать выбор первого элемента select evgeniy123 jQuery 2 05.02.2014 02:37
jQuery UI Datepicker включается только со второго клика по инпуту, нужно с первого adelante jQuery 3 07.07.2012 14:53
Как передать данные из первого deferred.done в последующие wwwboy jQuery 2 13.12.2011 00:19
Получение первого элемента объекта Kein Events/DOM/Window 6 02.06.2010 20:01