@l55uiz

Почему работает только первый id(ajax)?

Не могу понять, почему у меня работает добавление товара с первым(1) id в корзину без перехода по ссылке, а со всеми следующими товарами только переход по ссылке?(однако добавление также работает)
Я кликаю по записи с ID 1 - получаю ответ на текущей странице index.php, без перехода на cart.php. Ответ такой - 244053a576ba4fed843e7e94623953f9.png
Кликаю по записи с ID 2 и дальше - перехожу на страницу -8dd579052d2e4eed840396ca255bc481.png fbb9e0086129498bbccdfed1a51b9566.png хотя при клике по записи с ID 1 - я остаюсь на index.php. Почему так?

Следующий код:
В index.php вывожу товары:
<?php foreach ($menu->getItems() as $items_list) : ?>
       //тут вывожу, то что мне надо. Всякие блоки с инфой и т.д
        <a  href='cart.php?addToCart=<?=$items_list['id']?>' id="add-to-cart" data-id="<?=$items_list['id']?>" >В корзину</a>
        <?php endforeach; ?>

В JS пишу такой код. В блок count вывожу количество:
$(function () {
  $("#add-to-cart").on('click', function() {
      var id = $(this).attr('data-id');
      $.ajax({
        url: 'cart.php?addToCart='+id,
        type: 'GET',
        success:function (data) { 
        $('.count').append(data);
      }
      })
      return false;
    });
});
  • Вопрос задан
  • 371 просмотр
Решения вопроса 2
@Camaro67
Помог? - жми "Отметить решением"
Потому, что id в пределах страницы должен быть уникальным, а у вас он повторяется для каждой ссылки: id="add-to-cart". Поэтому берется первый попавшийся элемент с таким id.
Ответ написан
trushka
@trushka
атрибут id должен быть уникальным для каждого элемента на странице, по этому лучше класс использовать или вообще дата-аттрибут. Но он тут не нужен - всё есть в href.
<a  href='cart.php?addToCart=<?=$items_list['id']?>' class="add-to-cart" >В корзину</a>
$("a.add-to-cart").on('click', function() {
  $('.count').load(this.href)
}

Но если будет динамическая подгрузка новых товаров без перезагрузки (при прокрутке к низу или применении фильтра), то лучше обработчик не на сами ссылки вешать, а на родительский блок
$('.content').on('click', 'a.add-to-cart', function() {...}
Или вообще просто вынести в скрипте в отдельную функцию и прописать её в onclick на сервере.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы