Отслеживание выбора способа доставки в ИМ

Нужно отследить выбор пользователем способа доставки при оформлении заказа в ИМ, то есть получить значение value у полей с классом .delivery-item в момент их выбора или значение поля #delivery_id

Отслеживание выбора способа доставки

» » Сообщение:

Здравствуйте.
Не могу решить очень простое, на первый взгляд, задание. Нужно отследить выбор пользователем способа доставки при оформлении заказа в ИМ, то есть получить значение value у полей с классом .delivery-item в момент их выбора или значение поля #delivery_id.
Проблема в том, что поле #delivery_id скрыто, из-за этого на нем не обрабатываются события. А радио кнопки .delivery-item могут меняться скриптом, если способ оплаты не подходит под выбранный способ доставки.
Надеюсь на Вашу помощь.

delivery, значение, способ, скрыто, помощь, скриптом, подходит, оплаты, поле, выбранный, выбор, отследить, задание, пользователем, получить

Re: Отслеживание выбора способа доставки

Admin » » Сообщение:

Билык Александр писал(а) › 12 янв 2016, 22:00:Проблема в том, что поле #delivery_id скрыто, из-за этого на нем не обрабатываются события. А радио кнопки .delivery-item могут меняться скриптом, если способ оплаты не подходит под выбранный способ доставки.

Ну, как вариант (без исходников, по другому не назовешь) снимать показания с элемента при нажатии кнопки купить/отправить.
Ссылка на страницу очень помогла бы в решении данного вопроса..

Билык Александр писал(а) › 12 янв 2016, 22:00:Нужно отследить выбор пользователем способа доставки при оформлении заказа в ИМ

А эти данные не приходят с заказом? На мыло или смс? Должны.


Re: Отслеживание выбора способа доставки

Билык Александр » » Сообщение:

Вы меня немного не поняли.
http://sgdgddfgd.ucoz.com/shop
Добавьте материальный товар в корзину и перейдите к оформлению заказа.
Мне нужно, к примеру, при выборе способ доставки "Самовывоз" скрыть поле "Адрес доставки:".
Как отследить, что пользователь выбрал пункт "Самовывоз"?

Добавлено спустя 2 минуты 10 секунд:
на класс .delivery-item я могу повесить событие onchange, но оно не сработает, когда я сменю в способе оплаты "Наличными при получении" на "Способ оплаты № 2", при этом автоматически сменится "Самовывоз" на "Способ доставки № 2"



Re: Отслеживание выбора способа доставки

Билык Александр » » Сообщение:

Этот код сработает только в том случае, если после загрузки страницы будет выбран "Самовывоз".
Нужно решение, чтобы при смене с "Способ доставки № 2" или "Способ доставки № 3" на "Самовывоз", к примеру, запускался код.


Re: Отслеживание выбора способа доставки

Admin » » Сообщение:

Билык Александр писал(а) › 13 янв 2016, 01:43:на класс .delivery-item я могу повесить событие onchange, но оно не сработает, когда я сменю в способе оплаты "Наличными при получении" на "Способ оплаты № 2", при этом автоматически сменится "Самовывоз" на "Способ доставки № 2"

а..
А так:

Код: Выделить всё Развернуть
<script type="text/javascript">
$('.delivery-item').change(function(){
   if($('#del-type-1').is(':checked')){
      $('#order-fld-2').hide();
   }
}).trigger('change');
</script>

Даже вот так:

Код: Выделить всё Развернуть
$('.delivery-item').change(function(){
   if($('#del-type-1').is(':checked')){
      $('#order-fld-2').hide();
   }else{
      $('#order-fld-2').show();
   }
}).trigger('change');

Re: Отслеживание выбора способа доставки

Билык Александр » » Сообщение:

Так будет срабатывать, когда пользователь вручную выбирает "Самовывоз".
Но есть вариант, что когда пользователь выберет "Наличными при получении" в доставке "Самовывоз" активируется автоматически скриптом, как единственный допустимый вариант. В этом случае событие onchange не сработает.

The change event is fired for <input>, <select>, and <textarea> elements when a change to the element's value is committed by the user.
developer.mozilla.org


Re: Отслеживание выбора способа доставки

Admin » » Сообщение:

Билык Александр писал(а) › 13 янв 2016, 02:00:Так будет срабатывать, когда пользователь вручную выбирает "Самовывоз".
Но есть вариант, что когда пользователь выберет "Наличными при получении" в доставке "Самовывоз" активируется автоматически скриптом, как единственный допустимый вариант. В этом случае событие onchange не сработает.

Оно не сработает не потому что выбор сделан не пользователем, а потому что нет события на элементе, так как элементы заменяются скриптом.
Выходов 3.
1. Вешать событие через там-аут, типа:

Код: Выделить всё Развернуть
$('.payment-item').change(function(){
setTimeout(function(){
   if($('#del-type-1').is(':checked')&&!$('#del-type-1').is(':disabled')){
      $('#order-fld-2').hide();
   }else{
      $('#order-fld-2').show();
   }
},1000);
}).trigger('change');

2. Циклически проверять выбор через сет интервал.
Типа:

Код: Выделить всё Развернуть
setInterval(function(){
   if($('#del-type-1').is(':checked')&&!$('#del-type-1').is(':disabled')){
      $('#order-fld-2').hide();
   }else{
      $('#order-fld-2').show();
   }
},500);

3. Отредактировать системную функцию: shEvOrd что бы калбеком проверять что выбрано.
Типа:

Код: Выделить всё Развернуть
function shEvOrd(type,obj,act){
   if($('#checkout-form').length){
      $('#'+type+'_id').attr('value',obj.value);
      if((type == 'payment') || (type == 'delivery')){
         $('span.osum').html('<img alt="" src="http://s22.ucoz.net/img/icon/ajsml.gif" style="vertical-align:-4px;">');
         $('#checkout-form-mode').attr('value','change');
         _uPostForm('checkout-form',{complete:function(){
            if($('#del-type-1').is(':checked')&&!$('#del-type-1').is(':disabled')){
               $('#order-fld-2').hide();}else{$('#order-fld-2').show();}
            }
         });
      }
   }
}

- не факт, что работает.. нужно смотреть синтаксис _uPostForm


Re: Отслеживание выбора способа доставки

Билык Александр » » Сообщение:

1) Функция shEvOrd зашита в $PAYMENT_LIST$. Я так понимаю, придется все с этой переменной руками переписать или скриптом в инпуптов менять

script Код: Выделить всё Развернуть
onclick="shEvOrd('delivery',this,1)"

на

script Код: Выделить всё Развернуть
onclick="shEvOrd2('delivery',this,1)"

и сделать свою функцию shEvOrd2, правильно?
2) Функция _uPostForm может вернуть что-то другое, например ошибку, что сессия истекла. В этом случае нужно выполнить этот xml-ответ как и раньше. Вопрос в том, как это сделать.
Есть функция _uParseXML, которая вроде как для этого предназначена в юкозе, она она почему-то работает только в некоторых случаях.


Re: Отслеживание выбора способа доставки

Admin » » Сообщение:

Билык Александр писал(а) › 13 янв 2016, 10:01:Функция shEvOrd зашита в $PAYMENT_LIST$.

В ней нет ничего такого, что мешало бы переопределить ее.

Билык Александр писал(а) › 13 янв 2016, 10:01:Я так понимаю, придется все с этой переменной руками переписать или скриптом в инпуптов менять

Достаточно просто переопределить, например:

Код: Выделить всё Развернуть
window.shEvOrd = function(type,obj,act){ ... }
Билык Александр писал(а) › 13 янв 2016, 10:01:Функция _uPostForm может вернуть что-то другое, например ошибку

Я не знаю точно, что конкретно возвращает фукция, но, как видно из кода, никаких дополнительных обработчиков у нее нет.

Если для вас это слишком сложно, используйте setInterval, как более надежный вариант, чем тайм-аут.


Re: Отслеживание выбора способа доставки

Билык Александр » » Сообщение:

script Код: Выделить всё Развернуть
window.shEvOrd = function(type,obj,act){ ... }

Спасибо, это вариант.

Admin писал(а) › 13 янв 2016, 10:17:Я не знаю точно, что конкретно возвращает фукция, но, как видно из кода, никаких дополнительных обработчиков у нее нет.

Я изначально использовал success вместо complete, из-за этого ничего не происходило на странице после получения ответа, теперь все ок.
Спасибо большое!


Re: Отслеживание выбора способа доставки

Admin » » Сообщение:

Билык Александр писал(а) › 13 янв 2016, 10:37:Я изначально использовал success вместо complete, из-за этого ничего не происходило

Насколько я помню, в методе _uPostForm нет функции success.. - более подробно можно узнать, изучив код: http://s2.ucoz.net/src/uwnd.js

Билык Александр писал(а) › 13 янв 2016, 10:37:Спасибо большое!

Обращайтесь )