Массив объектов JavaScript не выбирается, если в строке значения есть пробелы - PullRequest
0 голосов
/ 09 октября 2019

Это jsFiddle моего кода Теперь я пытаюсь сделать приращение элемента корзины, когда нажимаю кнопку плюса, а также уменьшение. Он отлично работает для одного текстового имени элемента, например .. "Цыпленок", но не работает, когда в имени элемента есть пробел, например ... "Цыпленок и чипсы". Это код скрипта, отвечающий за добавление и вычитание элементов, уже находящихся в корзине.

  // Add to cart
  obj.addItemToCart = function(name, price, count) {
    for(var item in cart) {
      if(cart[item].name === name) {
        cart[item].count ++;
        saveCart();
        return;
      }
    }
    var item = new Item(name, price, count);
    cart.push(item);
    saveCart();
  }

  // Remove item from cart
  obj.removeItemFromCart = function(name) {
      for(var item in cart) {
        if(cart[item].name === name) {
          cart[item].count --;
          if(cart[item].count === 0) {
            cart.splice(item, 1);
          }
          break;
        }
    }
    saveCart();
  }
Это функция события кнопки, которая делает элемент увеличивать или уменьшать
// -1
$('.show-cart').on("click", ".minus-item", function(event) {
  var name = $(this).data('name')
  shoppingCart.removeItemFromCart(name);
  displayCart();
  iconCart();
})
// +1
$('.show-cart').on("click", ".plus-item", function(event) {
  var name = $(this).data('name')
  shoppingCart.addItemToCart(name);
  displayCart();
  iconCart();
})
Это HTML-кнопка, которая добавляет элемент, используя атрибуты данных

<button data-name="Pepper Soup" data-price="1.22" data-count="1" class="add-to-cart btn btn-primary">Add to cart</button>
Это ошибка, которую я получаю в консоли браузера ...

Указанное значение "undefined" не является допустимым числом. Значение должно соответствовать следующему регулярному выражению: -? (\ D + | \ d +. \ D + |. \ D +) ([eE] [- +]? \ D +)?

Ответы [ 3 ]

0 голосов
/ 09 октября 2019

Это решение может быть хорошо

value.replace(/ /g, '%25');
0 голосов
/ 09 октября 2019

РЕШИТЬ! Я решил это, добавив одинарные кавычки вне двойных кавычек, содержащих значение массива, т.е. data-name = '"+ cartArray [i] .name +"', к кнопке увеличения и уменьшению

function displayCart() {
  var cartArray = shoppingCart.listCart();
  var shipping = 120;
  var output = "";
  for(var i in cartArray) {
    output += "<tr>"
      + "<td>" + cartArray[i].name + "</td>" 
      + "<td>(" + cartArray[i].price + ")</td>"
      + "<td><div class='input-group'><button class='minus-item input-group-addon btn btn-primary' data-name='" + cartArray[i].name + "'>-</button>"
      + "<input type='number' class='item-count form-control' data-name='" + cartArray[i].name + "' value='" + cartArray[i].count + "'>"
      + "<button class='plus-item btn btn-primary input-group-addon' data-name='" + cartArray[i].name + "'>+</button></div></td>"
      + "<td><button class='delete-item btn btn-danger' data-name='" + cartArray[i].name + "'>X</button></td>"
      + " = " 
      + "<td>" + cartArray[i].total + "</td>" 
      +  "</tr>";
  }
  $('.show-cart').html(output);
  $('.PandD').html(shipping)
  $('.total-cart').html(shoppingCart.totalCart() + shipping);
  $('.total-count').html(shoppingCart.totalCount());
}
0 голосов
/ 09 октября 2019

https://jsfiddle.net/wbotk4ue/

Замена "" на строки шаблона `` решает проблему. Проблема была с пробелами в data-name

...