@IlyaMalyukov

Как поправить ошибку «Uncaught TypeError: addToCart is not a function»?

Нужно добавить текущий объект массива products в массив cart
Получаю ошибку
Uncaught TypeError: addToCart is not a function at HTMLButtonElement.onclick (VM243 index.html:37)

Но не могу понять, как это исправить

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>

    <div class="container">
        <header>
            <nav class="menu">
                <button class="cartLink" id="cartLink">Корзина</button>
            </nav>
        </header>
        
        <main>
            <div id="catalog" class="catalog"></div>
        </main>
        
    </div>

    <div class="modal" id="modal">
        <div class="modal__window">
            <p class="modal__window_close" id="modalClose">✕</p>
            <div class="modal__window_container">
                <h2 class="modal__window_title">Корзина</h2>
                    <ul>
                        <li>Тут пока ничего нет</li>
                    </ul>
            </div>
        </div>
    </div>

    <script src="products.js"></script>
    <script src="script.js"></script>
</body>
</html>


let catalog = document.querySelector('#catalog');
let btnView = document.querySelector('#btnView');
let modal = document.querySelector('#modal');
let cartLink = document.querySelector('#cartLink');
let modalClose = document.querySelector('#modalClose');

let cart = [];
let toCart = document.querySelector('#toCart');

// Каталог. Отображение товаров

products.forEach((i) => {

  catalog.innerHTML += `
    <div class="card">
        <h3>${i.name}</h3>
        <img src="${i.img}">
        <p>₽ ${i.price}</p>
        <button id="toCart" onclick = "addToCart()">Добавить в корзину</button>
    </div>
    `;

  });


// Модальное окно корзины

  cartLink.addEventListener('click', () => {
      modal.style.display = 'flex';
  })

  modalClose.addEventListener('click', () => {
    modal.style.display = 'none';
  });


// Добавление товаров в корзину 
  for(let j; j < products.length; i++) {
    function addToCart(j) {
      cart.push(products[j]);
      console.log(cart)
    };
  }


let products = [
    {id: 1, name: 'Футболка 1', img: "https://clck.ru/Smwci", category: 'Футболки', price: 2500},
    {id: 2, name: 'Футболка 2', img: "https://clck.ru/Smwee", category: 'Футболки', price: 2500},
    {id: 3, name: 'Футболка 3', img: "https://clck.ru/Smwg4", category: 'Футболки', price: 2500},
    {id: 4, name: 'Футболка 4', img: "https://clck.ru/Smwhs", category: 'Футболки', price: 2500},
    {id: 5, name: 'Комплект 1', img: "https://clck.ru/Smwit", category: 'Комплекты', price: 3500},
    {id: 6, name: 'Комплект 2', img: "https://clck.ru/Smwjd", category: 'Комплекты', price: 3500}
]
  • Вопрос задан
  • 672 просмотра
Пригласить эксперта
Ответы на вопрос 1
enkryptor
@enkryptor
software developer (TS/JS, python, C#)
У вас вызывается функция при нажатии на кнопку:
<button id="toCart" onclick = "addToCart()">Добавить в корзину</button>

Однако объявление этой функции находится внутри цикла и не попадает в область глобальной видимости.
// Добавление товаров в корзину 
  for(let j; j < products.length; i++) {
    function addToCart(j) {
      cart.push(products[j]);
      console.log(cart)
    };
  }
Поэтому при нажатии на кнопку выбрасывается ошибка "нет такой функции".

Скорее всего тут просто перепутаны местами строки. Должно быть:
// Добавление товаров в корзину 
function addToCart(j) {
    for(let j; j < products.length; i++) {
      cart.push(products[j]);
      console.log(cart)
    };
  }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы