Пытаюсь реализовать удаление товара из корзины. Корзина реализована так:
В куки carts помещаются через запятую ID товаров, пример: 36,37,38
На кнопку удалить товар из корзины висит функция, которая считывает строку ищет число и удаляет его в зависимости от того, в начали он, в конце или середине. Если в начале удаляет число вместе с запятой, если в середине аналогично, а если в конце только число.
Код функции:
function deletecart(id) {
var carts = $.cookie("cart");
if(carts.indexOf(id) == carts.length - 1)
carts = carts.replace(id, "");
else
carts = carts.replace(id + ",", "");
if(carts.indexOf(",") == -1) {
carts = null;
}
$.cookie("cart", carts);
getInfoCart();
}
На каждом товаре при указании функции на кнопку удалить посылается ID этого товара.
Все бы ничего, раньше в некоторых проектах с помощью какой-то магии это работало, однако в текущем проекте магия исчезла. В чем может быть проблема?
Возможно, более надёжный способ делать это будет таким:
function deletecart(id) {
var carts = $.cookie("cart");
carts = carts.split(',').filter(num => Number(num) !== id).join(',');
if (carts.length === 0) carts = null;
$.cookie("cart", carts);
getInfoCart();
}
Меня смутил фрагмент:
if(carts.indexOf(",") == -1) {
carts = null;
}
Потому что он почему-то возвращает null, если в списке осталось только одно число без разделителя (скажем, было 36,37, удалили 36,, осталось 37). Поэтому я изменил этот фрагмент: теперь cart становится null, только если в ней вообще не осталось номеров (если строка пустая).
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости