Округление количества товара и итоговая сумма
Собственно, вопрос — как при подсчете общего кол-ва и суммы в корзине использовать значение, измененное с помощью своих скриптов?
Пояснение:
Развивая тему о Количестве товара нецелым числом я добавил скрипт, который округляет введенное количество с определенным шагом.
Пример:
Одна единица товара это — 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
ваш скрипт по округлению скорее всего после отрабатывает
зы. Проще всего дать пользователю вводить данные в другом поле и на него навешивать всякие манипуляции… а в родное поле count передавать уже нужное значение и конфликтов не будет и отработает все по цепочке. Хотя хз может можно иначе но я так делаю…
И добавил скрипт
В скрытый инпут передается округленное значение, но итоговая сумма теперь вообще не меняется.
При нажатии на неё итоговая сумма будет пересчитываться с округленным значением.
Только вот не очень удобно нажимать на эту кнопку рядом с каждым товаром в корзине.
Событие cart/change, как-то же вызывается и при потере фокуса, ведь сумма меняется и без нажатия на кнопку, только вот значения не округленные… непонятненько…
между строчками №168 и 169, вот так:
Создайте другой файл, например, default2.js — копия оригинального файла с Вашей логикой и пропишите его использование в настройках minishop2