Округление количества товара и итоговая сумма
Собственно, вопрос — как при подсчете общего кол-ва и суммы в корзине использовать значение, измененное с помощью своих скриптов?
Пояснение:
Развивая тему о Количестве товара нецелым числом я добавил скрипт, который округляет введенное количество с определенным шагом.
Пример:
Одна единица товара это — 0,5 кв.м
Товар отпускается упаковками по 1,5 кв.м
Пользователь хочет купить 2 кв.м
Введенное количество округляется вверх до двух упаковок — 3 кв.м
А вот скрипт, который производит округление введенного количества в input при потере фокуса, к тому же пользователю разрешается вводить символы, буквы, пробелы, отрицательные значения, в любом случае, ему никогда не скажут, что он не прав, после обработки всегда получится число, пригодное для отправки в корзину:
При добавлении в корзину на странице со списком товаров всё работает как надо.
Непосредственно в корзине округление тоже работает, но при подсчете общего количества итоговой суммы, которые выводятся в span ms2_total_count и ms2_total_cost используется введенное количество, а не округленное. (см. прикрепленный файл)
Может нужно просто как-то поменять очередность выполнения скриптов? Чтобы при потере фокуса сначала выполнялся мой скрипт, а затем скрипт подсчета общего итога?
К тому же, если в корзине в количество товара ввести 0 или символы, то эта позиция удаляется из корзины. Если же сначала будет выполняться мой скрипт, то при вводе символов подставится значение, равное минимальному шагу и позиция не удалится.
Пояснение:
Развивая тему о Количестве товара нецелым числом я добавил скрипт, который округляет введенное количество с определенным шагом.
Пример:
Одна единица товара это — 0,5 кв.м
Товар отпускается упаковками по 1,5 кв.м
Пользователь хочет купить 2 кв.м
Введенное количество округляется вверх до двух упаковок — 3 кв.м
А вот скрипт, который производит округление введенного количества в input при потере фокуса, к тому же пользователю разрешается вводить символы, буквы, пробелы, отрицательные значения, в любом случае, ему никогда не скажут, что он не прав, после обработки всегда получится число, пригодное для отправки в корзину:
$(document).ready(function() {
;(function() {
var inp = $('.quantity'),
value = $('.quantity').val();
valueNumber = value.replace(/[^0-9.,]/gi, '');
valueNum = valueNumber.replace(/,/g, '\.');
valueN = valueNum.replace(/\.{2,}/g, '\.');
valueF = parseFloat(valueN);
calc = function() {
var currentVal = $(this).val();
currentValNumber = currentVal .replace(/[^0-9.,]/gi, '');
currentValNum = currentValNumber.replace(/,/g, '\.');
currentValN = currentValNum.replace(/\.{2,}/g, '\.');
currentValF = parseFloat(currentValN);
step = +$(this).attr('step'),
val= +currentValF;
if(isNaN(val) || val=='0' ){
val=step;
};
if (valueF.toString() !== currentValF ) {
valueF= Math.round((Math.ceil(val / step) * step) * 10) / 10;
$(this).val(valueF);
}
};
inp.blur(calc);
}());
});
При добавлении в корзину на странице со списком товаров всё работает как надо.
Непосредственно в корзине округление тоже работает, но при подсчете общего количества итоговой суммы, которые выводятся в span ms2_total_count и ms2_total_cost используется введенное количество, а не округленное. (см. прикрепленный файл)
Может нужно просто как-то поменять очередность выполнения скриптов? Чтобы при потере фокуса сначала выполнялся мой скрипт, а затем скрипт подсчета общего итога?
К тому же, если в корзине в количество товара ввести 0 или символы, то эта позиция удаляется из корзины. Если же сначала будет выполняться мой скрипт, то при вводе символов подставится значение, равное минимальному шагу и позиция не удалится.
Комментарии: 10
Так отправляйте в корзину округленное своим скриптом количество. А то у вас получается вы для пользователя показываете одно а в корзину кладете другое…
В корзину отправляется округленное, всё норм.
На странице с корзиной кол-во при изменении тоже округляется, но итоговая сумма считается с неокругленными.
На картинке:
в корзине было 1,5 кв.м, изменил на 2, округлилость до 3, но в итого всё-равно 2
На странице с корзиной кол-во при изменении тоже округляется, но итоговая сумма считается с неокругленными.
На картинке:
в корзине было 1,5 кв.м, изменил на 2, округлилость до 3, но в итого всё-равно 2
кинь ссылку глянуть — проще будет подсказать. Но мое мнение — ты либо в корзину не то кол-во кидаешь, либо при изменении кол-ва траблы какие… чудес то не бывает.
joxi.ru/NDrlMl53SKXpmP
ваш скрипт по округлению скорее всего после отрабатывает
зы. Проще всего дать пользователю вводить данные в другом поле и на него навешивать всякие манипуляции… а в родное поле count передавать уже нужное значение и конфликтов не будет и отработает все по цепочке. Хотя хз может можно иначе но я так делаю…
ваш скрипт по округлению скорее всего после отрабатывает
зы. Проще всего дать пользователю вводить данные в другом поле и на него навешивать всякие манипуляции… а в родное поле count передавать уже нужное значение и конфликтов не будет и отработает все по цепочке. Хотя хз может можно иначе но я так делаю…
Изменил форму в корзине, сделал так:
<input class="quantity" value="[[+count]]" step="[[+weight]]" maxlength="5" /> м<sup>2</sup>
<input class="cart-count" name="count" value="[[+count]]" type="hidden" />
И добавил скрипт$(document).ready(function() {
$('.quantity').blur(function(){
value = $(this).val();
$(this).next().next().val(value);
});
});
В скрытый инпут передается округленное значение, но итоговая сумма теперь вообще не меняется.
Значит данный код не передает значение в скрытый инпут
Оказывается, всё это можно заставить работать и без скрытого импута, просто нужно сделать видимой кнопку в форме
Только вот не очень удобно нажимать на эту кнопку рядом с каждым товаром в корзине.
Событие cart/change, как-то же вызывается и при потере фокуса, ведь сумма меняется и без нажатия на кнопку, только вот значения не округленные… непонятненько…
<button value="cart/change" name="ms2_action" type="submit"></button>
При нажатии на неё итоговая сумма будет пересчитываться с округленным значением.Только вот не очень удобно нажимать на эту кнопку рядом с каждым товаром в корзине.
Событие cart/change, как-то же вызывается и при потере фокуса, ведь сумма меняется и без нажатия на кнопку, только вот значения не округленные… непонятненько…
Решил данный вопрос, добавив свой скрипт в файл assets/components/minishop2/js/web/default.js
между строчками №168 и 169, вот так:
между строчками №168 и 169, вот так:
...
,initialize: function() {
miniShop2.Cart.setup();
if (!$(miniShop2.Cart.cart).length) return;
miniShop2.$doc.on('change', miniShop2.Cart.cart + ' ' + miniShop2.Cart.countInput, function() {
// ОКРУГЛЕНИЕ КОЛИЧЕСТВА
currentVal = $(this).val();
currentValNumber = currentVal.replace(/[^0-9.,]/gi, '');
currentValNum = currentValNumber.replace(/,/g, '\.');
currentValN = currentValNum.replace(/\.{2,}/g, '\.');
currentValF = parseFloat(currentValN);
step = +$(this).attr('step');
val = +currentValF;
if(isNaN(val) || val=='0' ){
val=step;
}
valR = Math.round((Math.ceil(val / step) * step) * 10) / 10;
$(this).val(valR);
// КОНЕЦ ОКРУГЛЕНИЕ КОЛИЧЕСТВА
$(this).closest(miniShop2.form).submit();
});
...
При обновлении потрутся Ваши труды.
Создайте другой файл, например, default2.js — копия оригинального файла с Вашей логикой и пропишите его использование в настройках minishop2
Создайте другой файл, например, default2.js — копия оригинального файла с Вашей логикой и пропишите его использование в настройках minishop2
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.