Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Подсчет товаров в интернет-магазине (https://javascript.ru/forum/jquery/58296-podschet-tovarov-v-internet-magazine.html)

dominik74 14.09.2015 12:26

Подсчет товаров в интернет-магазине
 
Всем привет. Есть скрипт, который считает цену товара в зависимости от его количества в корзине. Проблема в том, что если товар в корзине 1, то всё работает, а если более, то считает только в первой форме, что делать?
Собственно сам код:
$(document).ready(function() {
    var $count = $('#num_count');
    var $sum = $('.sum');
    var $old = $('.oldprice').val();
    var minCount = parseInt($count.attr('min'));
    var maxCount = parseInt($count.attr('max'));
    
    $count.on('change', function() {
        changeCountValue(0);
    });
    
    $('#button_plus').on('click', function() {
        changeCountValue(1);
    });
    
    $('#button_minus').on('click', function() {
        if($count.val() > 1){
			changeCountValue(-1);
		}
    });
    
    function changeCountValue(change)
    {
        var newCount = parseInt($count.val()) + change;
		var $sumi = parseFloat($('.sum').text());
        if (newCount < minCount) {
            newCount = minCount;        
        }
        else if (newCount > maxCount) {
            newCount = maxCount;
        }
        $count.val(newCount);
   
        $sum.text($old * newCount);
    }
});

Если создавать несколько блоков "goods-buy" (ниже), то считает только в первом блоке.
<div class="goods-buy">
	<div class="goods-buy-img"></div>
	<div class="goods-buy-name">Название товара</div>
	<div class="goods-buy-count">
		<input class="oldprice" type="hidden" value="175">
		<span id="button_minus" class="minus">-</span>
		<span class="quantity"><input type="text" step="1" id="num_count" name="quantity" value="1" class="input-text qty text" size="4" />шт.</span>
		<span id="button_plus" class="plus">+</span>
	</div>
<div class="goods-buy-price"><span class="sum">175</span> руб.</div>
<div class="goods-buy-delete"></div>
</div>

laimas 14.09.2015 12:37

var $count = $('#num_count'); - уже ошибка, id - это уникальное имя. Отсюда и проблемы.

dominik74 14.09.2015 13:25

Цитата:

Сообщение от laimas
var $count = $('#num_count'); - уже ошибка, id - это уникальное имя

ну это то исправил

laimas 14.09.2015 14:09

Ну и?

У поля type="text" не может быть такого step="1", только у типа number при чем по умолчанию.

В вашем случае лучше делегировать обработку input и "minus", "plus" родителю "goods-buy-count", в котором будет уже одно поле input, и в котором и производить изменения.

<input class="oldprice" type="hidden" value="175"> - лучше выбросить, и определить цену у поля количества.
И нет связи ID товара с его количеством, что надо определять и также в этом поле - name="quantity[100]", получая на сервере массив, ключами которого будут ID товаров, значениями их количество.


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