Как задать условие в форме заказа с помощью JS-скрипта?

Подскажите пожалуйста, как правильно добавить JS-скрипт в форму заказа магазина?
Скрипт работает плохо (через раз отрабатывает).
Что я делаю не так? Может быть есть способ проще?
Возможно я неправильно указываю порядок выполнения скриптов?
Буду благодарен за любую информацию.

Магазин сделан на WP / Woocommerce.
Хочу менять финальную стоимость заказа при выборе способа доставки.

Как у меня сейчас все устроено в данный момент:

Добавляю div-блок в файл form-checkout.php
<?php echo '<div class="new_box_one"></div>' ?>

Далее не нему подцепляю JS-скрипт:
function countDeliverySum() {
    let subTotalSum = document.querySelector('.cart-subtotal .woocommerce-Price-amount bdi');
    let subTotalSumOnlyNum = subTotalSum.innerHTML.replace(/[^0-9]/g, "");
    let totalSum = document.querySelector('.order-total .woocommerce-Price-amount bdi');

    let oldBox = document.querySelector('.new_box_one');
    let newBoxContent = `
        <div class="delivery_new_box">
            <div class="location_delivery">
                <form action="">
                    <input type="radio" name="test" id="location_moscow">
                    <label for="radio1_moscow">Москва</label>
    
                    <input type="radio" name="test" id="location_other_city">
                    <label for="radio1_mosobl">Московская обл</label>
    
                    <input type="radio" name="test" id="location_other_country">
                    <label for="radio1_mosobl">Другая страна</label>
                </form>
            </div>
            
            <div class="class_delivery">
                <input type="radio" name="test1" id="delivery_type_1">
                <label for="delivery_type_1">СДЭК</label>
                
                <input type="radio" name="test1" id="delivery_type_2">
                <label for="delivery_type_2">Почта России</label>
    
                <input type="radio" name="test1" id="delivery_type_3">
                <label for="delivery_type_3">Курьер сегодня</label>
    
                <input type="radio" name="test1" id="delivery_type_4">
                <label for="delivery_type_4">Курьер с примеркой</label>
    
                <input type="radio" name="test1" id="delivery_type_5">
                <label for="delivery_type_5">Самовывоз</label>
    
                <input type="radio" name="test1" id="delivery_type_6">
                <label for="delivery_type_6">Worldwide</label>
    
                <input type="radio" name="test1" id="delivery_type_7">
                <label for="delivery_type_7">СДЭК (Беларусь, Казахстан, Армения)</label>
            </div>
        </div>
    `;
    oldBox.innerHTML = newBoxContent;

    let location1 = document.querySelector('#location_moscow');
    let location2 = document.querySelector('#location_other_city');
    let location3 = document.querySelector('#location_other_country');

    let deliveryType1 = document.querySelector('#delivery_type_1');
    let deliveryType2 = document.querySelector('#delivery_type_2');
    let deliveryType3 = document.querySelector('#delivery_type_3');
    let deliveryType4 = document.querySelector('#delivery_type_4');
    let deliveryType5 = document.querySelector('#delivery_type_5');
    let deliveryType6 = document.querySelector('#delivery_type_6');
    let deliveryType7 = document.querySelector('#delivery_type_7');

    let del1 = 390; // Sdek
    let del2 = 1190; // Post of Russia
    let del3 = 450; // Courier today
    let del4 = 550; // Courier widt fitting
    let del5 = 0; // Take by self
    let del6 = 3500; // Worldwide
    let del7 = 590; // Sdek SNG '₽'


    location1.addEventListener('click', function locationOne() {

        totalSum.innerHTML = subTotalSumOnlyNum + ' ₽';

        deliveryType1.classList.add('active');
        deliveryType2.classList.add('active');
        deliveryType3.classList.add('active');
        deliveryType4.classList.add('active');
        deliveryType5.classList.add('active');
        deliveryType6.classList.remove('active');
        deliveryType7.classList.remove('active');

        deliveryType1.addEventListener('click', function() {
            let res = 0;
            res = Number(subTotalSumOnlyNum) + Number(del1);
            totalSum.innerHTML = res + ' ₽';
        })
        deliveryType2.addEventListener('click', function() {
            let res = 0;
            res = Number(subTotalSumOnlyNum) + Number(del2);
            totalSum.innerHTML = res + ' ₽';
        })
        deliveryType3.addEventListener('click', function() {
            let res = 0;
            res = Number(subTotalSumOnlyNum) + Number(del3);
            totalSum.innerHTML = res + ' ₽';
        })
        deliveryType4.addEventListener('click', function() {
            let res = 0;
            res = Number(subTotalSumOnlyNum) + Number(del4);
            totalSum.innerHTML = res + ' ₽';
        })
        deliveryType5.addEventListener('click', function() {
            let res = 0;
            res = Number(subTotalSumOnlyNum) + Number(del5);
            totalSum.innerHTML = res + ' ₽';
        })
    });

    location2.addEventListener('click', function () {

        totalSum.innerHTML = subTotalSumOnlyNum + ' ₽';

        deliveryType1.classList.add('active');
        deliveryType2.classList.add('active');
        deliveryType3.classList.remove('active');
        deliveryType4.classList.remove('active');
        deliveryType5.classList.remove('active');
        deliveryType6.classList.remove('active');
        deliveryType7.classList.remove('active');

        deliveryType1.addEventListener('click', function() {
            let res = 0;
            res = Number(subTotalSumOnlyNum) + Number(del1);
            totalSum.innerHTML = res + ' ₽';
        })
        deliveryType2.addEventListener('click', function() {
            let res = 0;
            res = Number(subTotalSumOnlyNum) + Number(del2);
            totalSum.innerHTML = res + ' ₽';
        })
    });

    location3.addEventListener('click', function () {

        totalSum.innerHTML = subTotalSumOnlyNum + ' ₽';

        deliveryType1.classList.remove('active');
        deliveryType2.classList.remove('active');
        deliveryType3.classList.remove('active');
        deliveryType4.classList.remove('active');
        deliveryType5.classList.remove('active');
        deliveryType6.classList.add('active');
        deliveryType7.classList.add('active');

        deliveryType6.addEventListener('click', function() {
            let res = 0;
            res = Number(subTotalSumOnlyNum) + Number(del6);
            totalSum.innerHTML = res + ' ₽';
        })
        deliveryType7.addEventListener('click', function() {
            let res = 0;
            res = Number(subTotalSumOnlyNum) + Number(del7);
            totalSum.innerHTML = res + ' ₽';
        })
    });

}
window.addEventListener("load", (event) => {
    countDeliverySum();
});


Вот так это выглядит:
6431ecf1c4e90511241989.png
  • Вопрос задан
  • 49 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы