Задать вопрос
@AlexAll

Как отправлять в ajax функцию вместе id продукта и его quantity?

Делаю кнопку для добавления товара в корзину, пример взял в opencart там примерно такой html код

<div class="button-group">
<div class="number">
    <span class="minus">
        <button type="button" class="btn_my btn-cart-quantity btn-number" data-type="minus" data-field="count">
            <span class="glyphicon glyphicon-minus"> </span>
        </button>
                
    </span>
    <input class="input_quantity" name="quantity" type="text" value="1" size="1"/>
    <span class="plus"> <button type="button" class="btn_my btn-cart-quantity btn-number" data-type="minus" data-field="count">
            <span class="glyphicon glyphicon-plus"> </span>
        </button></span>
</div>


<br/>
 <input type="hidden" name="product_id" value="<?= $id?>">
 <button class = "btn btn-cart" type="button" onclick="cart.add(<?= $id?>);">В корзину</button>
            
</div>


js вот такой

var cart = {
	'add': function(product_id, quantity) {  
            console.log(quantity);
		$.ajax({
			url: '/cart/add',
			type: 'post',
			data: 'id=' + product_id + '&quantity=' + (typeof(quantity) !== 'undefined' ? quantity : 1),

product_id в эту функцию попадает, а quantity = undefined поэтому в data он всегда принимает значение 1
Почему quantity = undefined ? почему не доходит его значение? весь opencart перерыл так и не понял как там это устроено, но в нем как то quantity передается при нажатии на эту кнопку В корзину

Что я делаю не так?
  • Вопрос задан
  • 230 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
1) функция у вас должна принимать 2 аргумента, вы ей передаете 1. Соответственно второй аргумент андефайнед.
2) для того чтобы получить значение квантити его передавать не надо, так как вы его заранее не знаете. Вместо этого: уберите второй аргумент в функции. Вместо этого используйте this как опорный объект, от него находите парент (это будет див оборачивающий ваш блок, в вашем случае div.button-group), и в нем ищете .input_quantity.val()(это будет количество ) и вот его уже передаете в параметрах аякса.
Ответ написан
@DanKud
onclick="cart.add(<?= $id?>, document.querySelector('.input_quantity').value);"
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Ну вот почему

onclick="cart.add(<?= $id?>);"

Это вызывается вот так
cart.add(123);
Второго параметра нет
Ответ написан
@glite
var cart = {
'add': function(product_id) {
$.ajax({
url: '/cart/add',
type: 'post',
data: {'id': product_id, 'quantity:'$('[name="quantity"]').val()}
}) ;
Ответ написан
Ваш ответ на вопрос

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

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