@ligisayan

Почему при перезагрузке страницы не выполняется условие скрипта?

Приветствую. Есть интернет-витрина с корзиной, в которую добавляются товары. При удалении позиции, по клику remove происходит удаление элемента как положено, но после этого сама страница перезагружается и не отрабатывает уже условие внутри клика if ($(".fixed-bottom .cart_list li").hasClass("empty")) {} т.е. это блок в котором находятся удаляемые элементы и по умолчанию, когда в нем ничего нет кроме div с классом empty он скрыт. А вот когда он есть -в нем находятся уже элементы, которые можно удалить, но проблема в том, что после удаления любого элемента страница перезагружается и блок снова скрывается, хотя из условия должен отображается, т.к. он не пустой.
$(".remove-item").click(function() {
  if ($(".fixed-bottom .cart_list li").hasClass("empty")) {
    $(".fixed-bottom").hide();
  } else {
    $('#foot-carousel').data('owlCarousel').removeItem($(this));
    $(".fixed-bottom").show();
  };
});

<div class="fixed-bottom">
  <div class="container">
    <div class="item" style="width: 315px;">
      <div class="li">
        <a href="#">
          <img width="60" height="60" src="#" class="attachment-60x60 wp-post-image" alt="item-4">
        </a>

        <div class="product-text">
          <div class="product-name">Название</div>
          <span class="quantity">13 × <span class="amount">120,000&nbsp;руб.</span></span>
        </div>
        <span class="cart-quantity">
							<a href="#" class="remove-item" title="Удалить эту позицию">remove</a>						</span>
      </div>
    </div>
    ...
  </div>
</div>
  • Вопрос задан
  • 1311 просмотров
Пригласить эксперта
Ответы на вопрос 3
Хорошо, когда есть на что посмотреть velikorodnov.com/wordpress/flatastic/classic

Теперь все ясно. Ты забыл указать, что твой элемент .remove-item это ссылка. Это меняет все. Переход по ссылке происходит раньше, чем обрабатывается твой обработчик события. Это можно предотвратить, передав колбеку объект события и обратиться к ее методу

$(".remove-item").click(function(e) {
  e.preventDefault();
  if ($(".fixed-bottom .cart_list li").hasClass("empty")) {
    $(".fixed-bottom").hide();
  } else {
    $('#foot-carousel').data('owlCarousel').removeItem($(this));
    $(".fixed-bottom").show();
  };
});

Перезагрузка страницы не произойдет и твои условия будут выполнены, но тогда твой сервер не узнает, что товар был удален из корзины, потому что сейчас эти данные передаются на бекенд именно через перезагрузку страницы. Тогда тебе придется исполнять этот запрос самостоятельно, через ajax, передавая те параметры, которые прописаны в ссылке.

Дополнение
Если элементы, на которые вы добавлили обработчик событий появляются на странице динамически, то есть в результате работы других скриптов, то ваш обработчик на них не сработает.

В таких случаях нужно использовать делегирование

$('родитель-элементов-который-точно-есть-на-странице').on(
'click', 
'.remove-item', 
function(e) { /*...далее по списку... */ });


Без этого ваш обработчик вообще никогда не запускается, чтобы мы внутри него не прописали.
Ответ написан
И так, по порядку:
  • В консоль смотрели?
  • Вставьте в колбек клика какой-нибудь алерт и проверьте срабатывает ли вообще клик
  • Ни один из блоков if-a не выполняется? Может Owl матерится на что-то?


p.s. в консоли по-любому что-то сыпется
Ответ написан
@jekaD
Не понял, при чем тут условие. оно же срабатывает только по клику. Кликнул, скрипт проверил, есть внутри элементы или нет, если нет скрыл. А после перезагрузки страницы этот скрипт ничего не проверяет. Смотрите состояние этого блока по умолчанию или ищите скрипт который при загрузке страницы проверяет, наличие элементов в блоке.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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