@vlad1337
Ad astra

Как решить проблему с корзиной на PHP?

Добрый день всем!
Без прелюдии: есть сайт loveyou.ua (не реклама). Сайт находится на движке OpenCart 2.0, но корзина была модифицирована. Всё, казалось, работало безупречно, однако сегодня заметил серьёзный баг - при добавлении в корзину двух и более товаров и изменении количества второго, третьего и тд товара, изменяется количество непосредственно первого товара. Так вот запутано.

Вот собственно сам код:
<input type="text" name="quantity[<?php echo $product['key']; ?>]" value="<?php echo $product['quantity']; ?>"  size="1" class="form-cart" style="display:none;" id="quan-txt" />

            <select value="<?php echo $product['quantity']; ?>" onchange="vvv = $(this).val(); $('#quan-txt').val(vvv); $('#cart-form2').submit(); " >
      
                  <?php
                    for($i=1; $i<=20; $i++) {
                      if ($i == $product['quantity']) {
                        echo "<option value='$i' selected>$i шт</option>";
                      } else {
                        echo "<option value='$i'>$i шт</option>";
                      }
                    }
                  ?>
      
            </select>


Как видите, было использовано свойство onchange.
Есть какие-нибудь предположения?
  • Вопрос задан
  • 384 просмотра
Решения вопроса 2
sanchezzzhak
@sanchezzzhak
Ля ля ля...
Вариант 1
<input type="text" name="quantity[<?php echo $product['key']; ?>]" value="<?php echo $product['quantity']; ?>"  size="1" class="form-cart" style="display:none;">
<select class="countOrders" value="<?php echo $product['quantity']; ?>" >
  <?php for($i=1; $i<=20; $i++):?>
			<option value="<?=$i?>" <?=($i == $product['quantity'] ? ' selected="selected"' : '' )?>><?=$i?> шт</option>
	   <?php endfor;?>
</select>
<span class="input-group-btn">
	<button type="button" data-toggle="tooltip" class="btn btn-danger"  onclick="cart.remove('<?php echo $product['key']; ?>');"><i class="fa fa-times-circle"></i></button>
</span>

Гдето внизу подключить
<script>
$( document ).ready(function() {
	$('.countOrders').on('change', function(e){
		$(this).prev().val( $(this).val() );
		$('#cart-form2').submit();
	})
});
</script>

Вариант 2
<input type="text" name="quantity[<?php echo $product['key']; ?>]" value="<?php echo $product['quantity']; ?>"  size="1" class="form-cart" style="display:none;"/>
<select class="countOrders" value="<?php echo $product['quantity']; ?>"  onchange="$(this).prev().val( $(this).val()); $('#cart-form2').submit(); " >

  <?php for($i=1; $i<=20; $i++):?>
			<option value="<?=$i?>" <?=($i == $product['quantity'] ? ' selected="selected"' : '' )?>><?=$i?> шт</option>
	   <?php endfor;?>
</select>
<span class="input-group-btn">
	<button type="button" data-toggle="tooltip" class="btn btn-danger"  onclick="cart.remove('<?php echo $product['key']; ?>');"><i class="fa fa-times-circle"></i></button>
</span>
<code>
Ответ написан
На странице плодятся элементы с одинаковым id - input type="text" id="quan-txt".
При попытке проставить значение $('#quan-txt').val(vvv); будет проставлено значение только первому 'скрытому' (для скрытия лучше input type="hidden" использовать) элементу.
Для поиска по такому селектору jquery использует самую быструю функцию document.getElementById, которая возвращает один единственный элемент.
api.jquery.com/id-selector
id должен быть уникальным на странице.
Решить проблему с корзиной поможет следующий код
onchange="$(this).prev().val($(this).val()); $('#cart-form2').submit();"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы