Не работает счетчик товара при пагинации

MODX REVO, shopkeeper последней версии

На странице:

plintus-optom.ru/plintusa-potolochnyie/

сделана Аякс пагинация.
При загрузки дополнительных элементов, кнопки «плюс» и «минус» на счетчике товара на дополнительных элементах не работают.

gyazo.com/79f58cbcdfa4d38cc502e88bf7f94432

Для этих целей через callbacks добавляется повторно скрипт, который задействует счетчик (ранее он уже присутствовал на странице в футтере).

<div class="products" id="pdopage">
    [[!+page.nav]]
    <div class="pure-g rows">
        [[!pdoPage?
            &ajaxMode=`button`
            &templates=`4`
            &limit=`[[!count:ne=`0`:then=`12`:else=`0`]]`
            &tpl=`product`
            &includeTVs=`price,unit,count,price_unit,sizes,hit,img,watermark,num`
            &prepareTVs=`img`
        ]] 
    </div>
</div>


<script type="text/javascript">
pdoPage.callbacks['before'] = function() {};
pdoPage.callbacks['after'] = function() {
    
$(".shk-item .count .but-minus, .shk-item .count .but-plus").click(function () {

            var shk_count = $(this).parent().parent().find("input[name='shk-count']");
            var count = parseInt(shk_count.val());

            if ($(this).hasClass("but-plus")) {
                shk_count.val(++count);
            }
            if ($(this).hasClass("but-minus")) {
                if (count != 1) {
                    shk_count.val(--count);
                }
            }
        });
}
</script>

При этом на элементах «первой страницы» при нажатии на «плюс» добавляется сразу 2 товара (т.к. на них действует уже 2 скрипта), а на элементах «второй страницы» счетчик начинает работать нормально.

Как можно решить проблему?

Не увидел проблемы на первой странице. У меня при нажатии плюcа добавляется единица. Но вообще тут callback-функции не нужны. Нужно использовать это: http://api.jquery.com/on/

Примерно так:

$("body").on("click", ".shk-item .count .but-minus, .shk-item .count .but-plus", function () {

    var shk_count = $(this).parent().parent().find("input[name='shk-count']");
    var count = parseInt(shk_count.val());

    if ($(this).hasClass("but-plus")) {
        shk_count.val(++count);
    }
    if ($(this).hasClass("but-minus")) {
        if (count != 1) {
            shk_count.val(--count);
        }
    }
});

Вызов только один раз, без калбаков.

@Andchir , сейчас на первой странице проблем нет, но если открыть вторую страницу (добавить элементы со второй), на на элементах первой странице счетчик начинает в 2 раза больше добавлять товара.

Плохо разбираюсь в JS, куда этот код нужно вставить?
Нужно что-то делать с переменной "body" ?

На данный момент у меня стоит в шаблоне категории скрипт изменения количества товара в callback и один в footer :

    $(".shk-item .count .but-minus, .shk-item .count .but-plus").click(function () {

        var shk_count = $(this).parent().parent().find("input[name='shk-count']");
        var count = parseInt(shk_count.val());

        if ($(this).hasClass("but-plus")) {
            shk_count.val(++count);
        }
        if ($(this).hasClass("but-minus")) {
            if (count != 1) {
                shk_count.val(--count);
            }
        }
    });

@ZVV123

Плохо разбираюсь в JS, куда этот код нужно вставить?
Нужно что-то делать с переменной "body" ?

Куда угодно, где есть jQuery. С "body" ничего делать не нужно.

но если открыть вторую страницу (добавить элементы со второй), на на элементах первой странице счетчик начинает в 2 раза больше добавлять товара

Да, теперь увидел.

@Andchir , заработало на общих страницах категорий, но счетчик перестал работать на странице с корзиной.

Посмотрел в коде, вроде шаблон один, код присутствует.

@Andchir, причем если добавить в корзину несколько товаров, а потом один удалить, то счетчик начинает работать.

Консоль пишет ошибку в этом скрипте

<script>
// изменение количества товара

function changeCount() {
    setTimeout(500);
    
    var dataString = $(".orderCartTable form").serialize();
        
	$.ajax({ 
		type: 'POST', 
		url: '/assets/components/shopkeeper3/connector_fe.php', 
		dataType: 'json', 
		data: dataString + "&shk_action=recount&psn=2", 
		beforeSend: function(result) { 
		},
		success: function(result){ 
		},
		error: function (xhr, ajaxOptions, thrownError) { 
		    alert(xhr.status); // пoкaжeм oтвeт сeрвeрa
		    alert(thrownError); // и тeкст oшибки
		},
		complete: function(result) { 
		    SHK.changeCartItemsCount();
		}
	});      
}

$("input[name='count[]']").bind('change, keyup', function(){
    changeCount();
});

$(".orderCartTable .count .but-minus, .orderCartTable .count .but-plus").click(function () {

    var shk_count = $(this).parent().parent().find("input[name='count[]']");
    var count = parseInt(shk_count.val());

    if ($(this).hasClass("but-plus")) {
        shk_count.val(++count);
    }
    if ($(this).hasClass("but-minus")) {
        if (count != 1) {
            shk_count.val(--count);
        }
    }
    
    changeCount();
});

</script>

Счетчик кол-ва товара в каталоге и в корзине это разные счетчики. Они никак не связаны. Поэтому делать их нужно по-разному. Смотрите демо-сайт, примеры чанков корзины. Есть параметр "counterFieldCart", который добавляет полям в корзине счетчики по селектору "input.shk-count".

@Andchir сказал Не работает счетчик товара при пагинации:

input.shk-count

Данный параметр активен. Ранее корзина работала, последнее что было сделано это был обновлен Shopkeeper с версии 3.2.3 до 3.2.4.

Классы все проставлены.

В консоле выдает ошибку на строчке

$("input[name='count[]']").bind('change, keyup', function(){

Если добавить в корзину несколько товаров и первый раз зайти в нее, то счетчик не работает, если из корзины удалить один из товаров, то счетчик начинает работать.

@Andchir сказал Не работает счетчик товара при пагинации:

is not defined

Перенес скрипт библиотеки выше данного скрипта, все заработало.
Спасибо большое!

Добрый день!
Пытаюсь настроить в корзине автоматический пересчет суммы заказа в зависимости от количества товара. Количество изменяется по клику на ссылки +/- (это благополучно работает). А общий результат не пересчитывается. Это должно работать в автоматическом режиме или надо дописывать код? Заранее спасибо.

Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.