Последние темы


Замена input на select в корзине

  • Всем привет!
    Есть у меня задача, заменить input на select в корзине, в общем то я все сделал, отображается все норм и выводится.
    Но только Пересчет всех товаров в корзине перестал срабатывать на select.
    Облазил файл shopkeeper.js ища где и что подправить, но так и не определил, что именно нужно поправить.

  • Я думаю надо просто вызвать такой код:

    $(document).on('change', '#shopCart select', SHK.recountItemAll);
    
    

    Селектор '#shopCart select' думаю сможете подправить сами, если потребуется.

  • @Andchir Пересчет действительно начал срабатывать, только он не подтягивал новое число из select.
    Пришлось вернуть input, скрыть его и изменять значение в нем по событию change select`а, затем вызывать для input событие keyup
    Кусочек кода, который может кому то пригодится:

    // #shk_prodCount - это скрытый input
    $(document).on('change', '#shopCart select', function(){
      var th = $('#shopCart select option:selected').val();
      $('#shk_prodCount').val(th);
      $('#shk_prodCount').keyup();
    });
    

    Оп, все не верно! Щас переделаю

  • У селекта какой name? Надо поставить такой же как был у инпута.

  • @Andchir

    Кусочек кода, который может кому то пригодится (исправленый):

    $(document).on('change', '#shopCart select', function(){
      var value = $(this).find('option:selected').val(); // новое значение select
      var inpt = $(this).parent('.quantity').find('.shk-count'); // Скрытый input
      inpt.val(value);
      inpt.keyup();
    });
    

    @Andchir сказал Замена input на select в корзине:

    А селекта какой name? Надо поставить такой же как был у инпута.

    name="count[]"

    Это все ставил, тут дело еще в том, что select и input разные по своей сути. Если у input сразу можно значение получить, то у select`а надо искать селектор option:selected...
    В общем сейчас все норм работает без коренного изменения скрипта shopkeeper.js 🙂

  • Если у input сразу можно значение получить, то у select`а надо искать селектор option:selected...

    Value берутся одинаково. На чистом JS:

    var value = select.value;
    

    На jQuery:

    var value = select.val();
    

    Демо: https://jsfiddle.net/p6sjp85s/

    И form.serialize() должен работать одинаково.

  • @Andchir сказал Замена input на select в корзине:

    Value берутся одинаково. На чистом JS:

    Хм, действительно:

    $(document).on('change', '#shopCart select', function(){
      var value = $(this).val(); // новое значение select
      var inpt = $(this).parent('.quantity').find('.shk-count'); // Скрытый input
      inpt.val(value);
      inpt.keyup();
    });
    

    Так тоже работает 🙂

  • @Andchir В общем сделав вывод, переделал скрипт.
    Тот код что выше убираем вообще и забываем.
    Далее в функции setCounterToField (файл shopkeeper.js) меняем:

    /*fields.filter(':text').each( function( i ){*/
    fields.filter('select').each( function( i ){
    

    А так же:

    /*el.bind('keyup',function(e){*/
    el.on('change',function(e){
    

    И в целом будет работать, хотя еще много чего можно выкинуть/закомментировать из этой функции.

    Функция полностью:

        /* Добавляет кнопки управления счетчиком для поля*/
    	setCounterToField: function( fields, callback ){
    		if ( fields.size() > 0 ) {
    			fields.filter('select').each( function( i ){
    				var el = $(this);
    				el.on('change',function(e){
    					if ( typeof callback == 'function' ) { callback( $(this) ); }
    				});
    			});
    		}
    	},
    
  • Да и в функции counterFieldCartInit

    //SHK.setCounterToField( $('[data-shopcart] input.shk-count'), callback );
    SHK.setCounterToField( $('[data-shopcart] select.shk-count'), callback );
    
  • Видимо у вас задача заменить на селект не только в корзине, а везде. Я отвечал про случай, если только в корзине, этого должно быть достаточно.

 

Последние комментарии

  • Z

    Спасибо, действительно проще создать отдельно.

    Читать далее
  • Но проблема в том, что эта старая цена "дублируется" в плесхолдер "Дополнительных услуг" - [[+addit_data]].

    Можно не использовать [[+addit_data]], а выводить параметры по-отдельности.

    Цитата из документации:

    [[+shk_любой доп.параметр]] - любой доп. параметр, выбранный при добавлении товара в корзину (из [[+addit_data]]), например [[+shk_param1]].
    Если параметры сделаны в виде чекбоксов, то чтобы вывести отдельно каждый из них, нужно добавлять индекс (номер от нуля) для параметров следующих за первым.
    Пример: [[+shk_param1]], [[+shk_param1_1]], [[+shk_param1_2]] ...
    [[+shk_любой доп.параметр_price]] - цена доп.параметра. Пример: [[+shk_param1_price]].

    Читать далее
  • Z

    Доброго времени суток. Не могу разобраться, как передать данные migx-поля в корзину в плейсхолдер без "дублирования" в [[+addit_data]]
    Суть в чем: У меня есть 2 цены у товара (со скидкой и без скидки) Форма для отправки в корзину:

    <form action="[[~[[*resource_id]]? &scheme=`abs`]][[*alias]].html" method="post"> <input type="hidden" name="shk-id" value="[[*id]]" /> <input type="hidden" name="shk-name" value="[[*pagetitle]]" /> <input type="hidden" name="price_old__[[*id]]__add" value="[[*price_old]]" /> <input type="hidden" name="shk-count" value="1" /> <div class="product-price"> Цена: <span class="shk-price">[[!*price:shk_curr_rate:num_format]]</span> Старая цена - <span class="shk-price-old">[[+price_old]]</span> [[!+shk_currency]] </div> <div class="padding-lr-30"> <h5>Дополнительные услуги</h5> [[*param1]] </div> <div class="product-price"> <button class="btn btn-lg btn-primary" type="submit" class="shk-but">В корзину</button> </div> </form>

    Данные со "старой ценой" в корзину попадают нормально и выводится в нужном месте в плейсхолдере:
    [[+shk_price_old]]
    Но проблема в том, что эта старая цена "дублируется" в плесхолдер "Дополнительных услуг" - [[+addit_data]]. Как сделать чтобы старая цена не выводилась в [[+addit_data]]? Или может я как то не правильно передаю MIGX-параметр в корзину ? Заранее спасибо.

    Читать далее
  • Фотографии, как я понял, это второй вопрос. Я по нему пока ничего не отвечал и не просил информации. Это не отменяет того, что в вашем конфиге есть ошибка, о которой я писал выше. Не нужно задавать разные вопросы в одной теме, чтобы не было путаницы.
    http://forum.modx-shopkeeper.ru/topic/15/рекомендации-по-оформлению-темы-с-вопросом

    Читать далее