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

Статус
В этой теме нельзя размещать новые ответы.

bezzubtsev

Гуру форума
Регистрация
14 Май 2015
Сообщения
274
Реакции
89
Ищу помощника на периодическую подработку. Просьба писать в личку.

Необходимо решить такую задачу:
Есть список:
Код:
<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
Ищу помощника на периодическую подработку. Просьба писать в личку.

Необходимо решить такую задачу:
Есть список:
Код:
<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.
Не очень разбираюсь в JS, но видел схожую реализацию в imageCMS. Может попробовать выдрать оттуда исполняющие скрипты? И уже на их основе запилить решение под ваши нужды.
Да и вопрос на засыпку, что за CMS из которой вы привели эти куски кода?
И еще, в выше указанной мной CMS при выборе метода доставки в карточке оформления заказа, как раз и появляется связанный с ним метод оплаты. Например: Доставка курьером ---> Оплата СберБанк, и собственно появляются поля для заполнения Ф.И.О. и так далее.
 
Это куски кода от Magento и Onestepcheckout - но сути это не меняет. Код прописывается в эти участки функции, и специалист по JS это видит сразу.
 
Задача решена, всем спасибо!
Если вам под силу прочитать код, предложить свои способы решения и хотите поработать со мной - пишите в личку, указывайте ваше решение по задаче (а-ля вступительный тест) и ваши контактные данные.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху