Применение купонов и баланса личного счета без перезагрузки страницы Есть решение

Как сделать, чтобы применение купона или применение в качестве оплаты за заказ баланса личного счета было без перезагрузки страницы?

1 ответ

  • 1
    Михаил Ушенин Webasyst 30 июня 2015 04:36 # Решение

    Пример для темы default. В файле cart.js в самом конце перед закрывающими скобками

    });

    Добавьте вот такой обработчик:

    $('[name="coupon_code"]').closest('form').find(':submit').not('[name="checkout"]').on('click', function() {
        var form = $(this).closest('form');
        $('<i class="icon16 loading"></i>').insertAfter($('[name="coupon_code"]').parent().find(':submit'));
        $.post('', form.serialize(), function(html) {
            $('.page-content').empty().append(html);
        });
        return false;
    });
    • +1
      Константин Егоров Константин Егоров 30 июня 2015 09:56 #

      Спасибо, Михаил!

    • +1
      Константин Егоров Константин Егоров 30 июня 2015 18:57 #

      Хм. Эт че получается? Теперь при нажатии на любую кнопку submit в form в корзине (а там таких кнопок может быть 3 - для купона, для применения баланса, ну и отправка заказа) у меня тупо рефрешится страница, а не выполняются действия :)

      Только с купоном работает, с остальными рефрешится.

      У меня заказ в 1 шаг...

      • +1

        Это был пример для стандартной темы Default. Для всяких нестандартных отклонений нужно адаптировать этот скрипт.

        • +1

          С кнопкой "Отправить заказ" разобрался. Нужно добавить еще одно условие "НЕ". Первую строчку нужно заменить на эту:

          $('[name="coupon_code"]').closest('form').find(':submit').not('[name="checkout"]').not('[name="saveBestcart"]').on('click', function() {

          А как "Использовать баланс" (накопительную скидку покупателя) тоже без перезагрузки? Тот который name="use_affiliate"? Делаю по аналогии с купонами - не получается.

          • +1
            $('[name="coupon_code"], [name="use_affiliate"]').closest('form').find(':submit').not('[name="checkout"]').not('[name="saveBestcart"]').on('click', function() {
                var submit = $(this);
                var form = submit.closest('form');
                if (submit.attr('name') !== undefined) {
                    form.append('<input type="hidden" name="' + submit.attr('name') + '" value="' + submit.val() + '">');
                }
                $('<i class="icon16 loading"></i>').insertAfter(submit);
                $.post('', form.serialize(), function(html) {
                    $('.page-content').empty().append(html);
                });
                return false;
            });

            И заодно измените обработчик для #cancel-affiliate вот так:

            $("#cancel-affiliate").click(function () {
                var link = $(this);
                var form = link.closest('form')
                form.append('<input type="hidden" name="use_affiliate" value="0">');
                $('<i class="icon16 loading"></i>').insertAfter(link);
                $.post('', form.serialize(), function(html) {
                    $('.page-content').empty().append(html);
                });
                return false;
            });
    • +1
      Worker Worker 11 августа 2016 11:54 #

      Михаил, подскажите, как при применении купона запустить обновление корзины updateCart?

      Не знаю, что передавать в $.post для data.

      coupon_name существует, лог 'test' в консоли есть.

      Для других действий (удаление товара, изменение количества) берется data-id, а здесь мне непонятно, как и что передавать?

      function updateCart(data)
          {
              $(".cart-total").html(data.total);
              if (data.discount_numeric) {
                  $(".cart-discount").closest('tr').show();
              }
              $(".cart-discount").html('− ' + data.discount);        
          }
      
      $('[name="coupon_code"]').closest('form').find(':submit').on('click', function() {
          var form = $(this).closest('form');
          var coupon_name = $('[name="coupon_code"]').val();
          if (coupon_name) {
              $.post('/cart/', {html: 1, coupon_code: coupon_name}, function (response) {
                  console.log('test');
                  updateCart(response.data);
              });
          }
          return false;
      })

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите