@likeapimp
web dev, web design

Как получить значение inpu с блоков с одинаковым классом?

Здравствуйте! Есть 4 блока товаров с классом .BLOCK, в каждом есть input .QUANTITY и кнопка .ADD
По кнопке .ADD блок должен отправлять в корзину c параметрами id товара и количество товара.

Товары добавляются нормально, но количество устанавливается только по input .QUANTITY первого блока, а нужно чтобы input .QUANTITY брался с каждого блока свой.
<?php foreach ($products as $product) { ?>
    
  <div class="food_box_scroll_item"> <img  class="img_box_scroll" src="<?php echo $product['thumb']; ?>" alt="Фото <?php echo $product['name']; ?>">
    <div class="font_food_box_scroll_h"><?php echo $product['name']; ?></div>
    <div class="font_food_box_scroll"><?php echo $product['tags']; ?></div>
    <br>
    <div class="block_number_of_servings"> <span class="plus minus"><span>–</span></span> &nbsp;
      <input name="number_of_servings" type="text" value="1" size="3" maxlength="6" class="value_number_of_servings">
      &nbsp; <span class="plus"><span>+</span></span> <span class="servings" >порц.</span></div>
    <div class="block_price"><span class="font_price"><?php echo substr($product['price'], 0, -3); ?></span> <span class="font_currency">руб.</span></div>
    <div class="btn_food_box_scroll">
        <a rel="<?php echo $product['product_id']; ?>" class="but_call_min"><span>Купить</span></a>
    </div>
  </div>
<?php } ?>


$(document).ready(function() {
    $(".btn_food_box_scroll .but_call_min").click(function(){
    prod_id = $(this).attr("rel");
    count_this = parseInt($(this).parent().prev(".block_number_of_servings").children(".value_number_of_servings").val());
    addToCart(prod_id, count_this);
    });
});
 
function addToCart(product_id, quantity) {
 
    $.ajax({
        url: 'index.php?route=checkout/cart/add',
        type: 'post',
        data: 'product_id=' + product_id + '&quantity=' + quantity,
        dataType: 'json',
        success: function(json) {
            $('.success, .warning, .attention, .information, .error').remove();
            
            if (json['redirect']) {
                location = json['redirect'];
            }
            
            if (json['success']) {
                $('#notification').html('<div class="success" style="display: none;">' + json['success'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');
                
                $('.success').fadeIn('slow');
                
                $('#cart-total').html(json['total']);
                
                // Обновляем корзину
                $('#cart').addClass('active');
                    
                $('#cart').load('index.php?route=module/cart #cart > *');
                
                $('#cart').live('mouseleave', function() {
                    $(this).removeClass('active');
                });
                
                $('html, body').animate({ scrollTop: 0 }, 'slow'); 
            }   
        }
    });
}
  • Вопрос задан
  • 2359 просмотров
Решения вопроса 1
Я так понимаю, что у вас вот так выглядит иерархия DOM:
div.food_box_scroll_item > div.btn_food_box_scroll > a.but_call_min

Тогда вам надо немного подправить ваш JS:
$('.but_call_min').click(function(){
    console.log('Selected:',$(this).closest('.food_box_scroll_item').find(".value_number_of_servings").val());
});

Этот код выводит в консоль значение с input.

А вот так будет выглядеть Ваш код:
/*Add to cart*/
$(document).ready(function() {
	$(".food_box_scroll_item .btn_food_box_scroll .but_call_min").click(function(){
		prod_id = $(this).attr("rel");
		count_this = parseInt($(this).closest('.food_box_scroll_item').find(".value_number_of_servings").val());		
		// addToCart(prod_id, count_this);
                // alert(count_this); // - так плохо
                console.log(count_this); // - так хорошо
	});
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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