Ищу помощника - доработка функции onclick на radio и изменение checked параметров

Тема в разделе "JavaScript", создана пользователем bezzubtsev, 19 дек 2016.

Статус темы:
Закрыта.
Модераторы: ZiX
  1. bezzubtsev

    bezzubtsev

    Регистр.:
    14 май 2015
    Сообщения:
    245
    Симпатии:
    71
    Ищу помощника на периодическую подработку. Просьба писать в личку.

    Необходимо решить такую задачу:
    Есть список:
    Код:
    <dl class="sp-methods">
    <dt>Доставка почтой</dt>
    <dd>
    <ul>
    <li>
    <style type="text/css">
    #advice-validate-one-required-by-name-s_method_flatrate4_flatrate4{
    display: none !important;
    }
    </style>
    
    <input name="shipping_method" type="radio" value="flatrate4_flatrate4" id="s_method_flatrate4_flatrate4" class="radio validate-one-required-by-name" onclick="save_shipping_method(shipping_method_url, update_shipping_payment, update_shipping_review);">
    <label for="s_method_flatrate4_flatrate4">по Беларуси <span class="price">5,00&nbsp;BYN</span> </label>
    </li>
    </ul>
    </dd>
    <dt>Доставка курьером</dt>
    <dd>
    <ul>
    <li>
    <style type="text/css">
    #advice-validate-one-required-by-name-s_method_flatrate3_flatrate3{
    display: none !important;
    }
    </style>
    
    <input name="shipping_method" type="radio" value="flatrate3_flatrate3" id="s_method_flatrate3_flatrate3" class="radio validate-one-required-by-name" onclick="save_shipping_method(shipping_method_url, update_shipping_payment, update_shipping_review);">
    <label for="s_method_flatrate3_flatrate3">за пределами МКАД 5 км <span class="price">8,00&nbsp;BYN</span> </label>
    </li>
    </ul>
    </dd>
    <dt>Доставка курьером</dt>
    <dd>
    <ul>
    <li>
    <style type="text/css">
    #advice-validate-one-required-by-name-s_method_flatrate2_flatrate2{
    display: none !important;
    }
    </style>
    
    <input name="shipping_method" type="radio" value="flatrate2_flatrate2" id="s_method_flatrate2_flatrate2" class="radio validate-one-required-by-name" onclick="save_shipping_method(shipping_method_url, update_shipping_payment, update_shipping_review);">
    <label for="s_method_flatrate2_flatrate2">в пределах МКАД <span class="price">5,00&nbsp;BYN</span> </label>
    </li>
    </ul>
    </dd>
    <dt>Самовывоз</dt>
    <dd>
    <ul>
    <li>
    
    <input name="shipping_method" type="radio" value="flatrate_flatrate" id="s_method_flatrate_flatrate" checked="checked" class="radio validate-one-required-by-name" onclick="save_shipping_method(shipping_method_url, update_shipping_payment, update_shipping_review);">
    <label for="s_method_flatrate_flatrate">Самовывоз <span class="price">0,00&nbsp;BYN</span> </label>
    </li>
    </ul>
    </dd>
    </dl>

    Есть функция в JS
    Код:
    function save_shipping_method(shipping_method_url, update_shipping_payment, update_shipping_review) {
        if (typeof update_shipping_payment == 'undefined') {
            var update_shipping_payment = false;
        }
        if (typeof update_shipping_review == 'undefined') {
            var update_shipping_review = false;
        }
    
        var form = $('one-step-checkout-form');
        var shipping_method = $RF(form, 'shipping_method');
        var payment_method = $RF(form, 'payment[method]');
    
        //reload payment only if this feature is enabled in admin - show image loading
        if (update_shipping_payment == 1) {
            var payment_method_section = $$('div.onestepcheckout-payment-methods')[0];
            paymentLoad();
        }
        //show image loading for review total
        if (update_shipping_review == 1) {
            var review = $('checkout-review-load');
            reviewLoad();
        }
        var parameters = {
            shipping_method: shipping_method,
            payment_method: payment_method
        };
    
        //Find payment parameters and include
        var items = $$('input[name^=payment]', 'select[name^=payment]');
        var names = items.pluck('name');
        var values = items.pluck('value');
    
        for (var x = 0; x < names.length; x++) {
            if (names[x] != 'payment[method]') {
                parameters[names[x]] = values[x];
            }
        }
        if ((update_shipping_payment == 1) || (update_shipping_review == 1)) {
            $('onestepcheckout-button-place-order').disabled = true;
            $('onestepcheckout-button-place-order').removeClassName('onestepcheckout-btn-checkout');
            $('onestepcheckout-button-place-order').addClassName('place-order-loader');
        }
        var request = new Ajax.Request(shipping_method_url, {
            method: 'post',
            parameters: parameters,
            onFailure: '',
            onSuccess: function (transport) {
                if (transport.status == 200) {
                    var response = getResponseText(transport);
                    if (enable_update_payment) {
                        if (update_shipping_payment == 1) {
                            payment_method_section.update(response.payment_method);
                            paymentShow();
                            // show payment form if available
                            if ($RF(form, 'payment[method]') != null) {
                                try {
                                    var payment_method = $RF(form, 'payment[method]');
                                    $('container_payment_method_' + payment_method).show();
                                    $('payment_form_' + payment_method).show();
                                } catch (err) {
                                }
                            }
                        }
                    }
                    if (update_shipping_review == 1) {
                        review.update(response.review);
                        reviewShow();
                    }
                    checkvalidEmail();
                }
            }
        });
        //alert ('ok');   
    }

    Ниже пример кода, как должно было бы работать, если бы не было других скриптов, блокирующих эти функции:
    Код:
    $('label[for="s_method_flatrate4_flatrate4"]').click(function(){
          $(".dddddd--city").show(500);
          $(".dddddd--street").show(500);
          $( "#p_method_checkmo" ).prop( "checked", false );
          $( "#p_method_cashondelivery" ).prop( "checked", true );
        });                   
    $('label[for="s_method_flatrate3_flatrate3"]').click(function(){
                $(".dddddd--city").show(500);
          $(".dddddd--street").show(500);
          $( "#p_method_checkmo" ).prop( "checked", false );
          $( "#p_method_cashondelivery" ).prop( "checked", true );     
        });           
    $('label[for="s_method_flatrate2_flatrate2"]').click(function(){
                $(".dddddd--city").show(500);
          $(".dddddd--street").show(500);
          $( "#p_method_checkmo" ).prop( "checked", false );
          $( "#p_method_cashondelivery" ).prop( "checked", true );
        });   
    $('label[for="s_method_freeshipping_freeshipping"]').click(function(){
            $(".dddddd--city").show(500);
          $(".dddddd--street").show(500);
          $( "#p_method_checkmo" ).prop( "checked", false );
          $( "#p_method_cashondelivery" ).prop( "checked", true );
          });           
    $('label[for="s_method_flatrate_flatrate"]').click(function(){
                $(".dddddd--city").hide(500);
          $(".dddddd--street").hide(500);
          $( "#p_method_checkmo" ).prop( "checked", true );
          $( "#p_method_cashondelivery" ).prop( "checked", false );       
          });    

    Задача - сделать так, чтобы при выборе одного из 5-ти input методов доставки происходили изменения в других input'ах методов оплаты, плюс скрывались/показывались div блоки.

    Буду рад помощи и найти помощника на различные задачи по JS.
     
  2. dollar1981

    dollar1981 Постоялец

    Регистр.:
    17 май 2012
    Сообщения:
    130
    Симпатии:
    38
    Не очень разбираюсь в JS, но видел схожую реализацию в imageCMS. Может попробовать выдрать оттуда исполняющие скрипты? И уже на их основе запилить решение под ваши нужды.
    Да и вопрос на засыпку, что за CMS из которой вы привели эти куски кода?
    И еще, в выше указанной мной CMS при выборе метода доставки в карточке оформления заказа, как раз и появляется связанный с ним метод оплаты. Например: Доставка курьером ---> Оплата СберБанк, и собственно появляются поля для заполнения Ф.И.О. и так далее.
     
  3. bezzubtsev

    bezzubtsev

    Регистр.:
    14 май 2015
    Сообщения:
    245
    Симпатии:
    71
    Это куски кода от Magento и Onestepcheckout - но сути это не меняет. Код прописывается в эти участки функции, и специалист по JS это видит сразу.
     
  4. bezzubtsev

    bezzubtsev

    Регистр.:
    14 май 2015
    Сообщения:
    245
    Симпатии:
    71
    Задача решена, всем спасибо!
    Если вам под силу прочитать код, предложить свои способы решения и хотите поработать со мной - пишите в личку, указывайте ваше решение по задаче (а-ля вступительный тест) и ваши контактные данные.
     
Статус темы:
Закрыта.