Показать сообщение отдельно
  #1 (permalink)  
Старый 06.11.2019, 09:12
Интересующийся
Отправить личное сообщение для joyandjoy Посмотреть профиль Найти все сообщения от joyandjoy
 
Регистрация: 21.10.2019
Сообщений: 19

Калькулятор услуг
Здравствуйте!
Нужна помощь с калькулятором.

Задача у меня такая:
Пытаюсь собрать калькулятор, не могу придумать алгоритм.

Цена зависит от таких факторов - размер, тип, упаковка, рамка. Все это уже предусмотренно, и конкретные размеры, тип, пользователю предоставляется только выбор.

1. Начинает пользователь с главного, размер, пусть будет три размера 10*10, 20*20 и 30*30.
2. После выбирает тип, пусть будет тип 1, тип 2 и тип3
Цена зависит от размера т.е. если размер 10*10 и тип1 или тип2 или тип3, то цена 100, если размер 20*20 и тип1 или тип2 или тип3 - цена 200, если размер 30*30 и тип1 или тип 2, или тип3 цена 300.
3. Выбирает рамку, она зависит от размера, если размер 10*10 цена 100, если размер 20*20 цена 200, если 30 на 30 цена 300. Если рамка не нужна, то нечего не складывается.
4. Выбор упаковки, аналогично с рамкой, зависит от размера, 10*10 цена 100, если размер 20*20 цена 200, если 30 на 30 цена 300. Если упаковка не нужна, то нечего не складывается.

Т.е. есть 4 пункта, все 4 надо выбрать (кроме последних двух, они не обязательны, но если выбираются, то нужно добавлять к основной сумме).

Есть такая форма
<form method="POST" action="send.php" id="order">
        <label>Размер: </label>
        <select name="size">
            <option></option>
        </select><br />
        <label>Тип: </label>
        <select name="type">
            <option></option>
        </select><br />
        <label>рамка: </label>
        <select name="ramka">
            <option></option>
        </select><br />
        <label>упаковка: </label>
        <select name="upakovka">
            <option></option>
        </select><br />		
        <label id="price">Цена: </label><br />
        <input type="submit" value="Заказать">
    </form>

Проверка на заполненность и вычисление цены в зависимости от размера и типа.
$("#order").validate({
            rules: {
                size: {
                    required: true
                },
                type: {
                    required: true
                }
				ramka: {
                    required: true
                },
                upakovka: {
                    required: true
                }
				
            },
            messages: {
                size: {
                    required: "Не выбран размер."
                },
                type: {
                    required: "Не выбран тип."
                }
				ramka: {
                    required: "Не выбрана рамка."
                },
                upakovka: {
                    required: "Не выбрана упаковка."
                }	
		
            }
        });
        var sizes = [{ id: 1, value: "А6" }, { id: 2, value: "А5" }, { id: 3, value: "А4" }];
        var types = [{ id: 1, value: "Тип 1" }, { id: 2, value: "Тип 2" }, { id: 3, value: "Тип 3" },];
  
  
        var prices = [
            { id: 1, sizeId: 3 && 2 && 1, typeId: 1, value: 0 }, { id: 2, sizeId: 1, typeId: 2, value: 150 }, { id: 3, sizeId: 1, typeId: 3, value: 200 },
{ id: 4, sizeId: 2, typeId: 2, value: 250 }, { id: 5, sizeId: 2, typeId: 3, value: 300 },
 { id: 6, sizeId: 3, typeId: 2, value: 350 }, { id: 7, sizeId: 3, typeId: 3, value: 400 },
        ];
        var sizeEl = $("#order")[0]["size"],
            typeEl = $("#order")[0]["type"];
        for (var i = 0; i < sizes.length; i++)
            sizeEl.add(new Option(sizes[i].value, sizes[i].id));
        for (var i = 0; i < types.length; i++)
            typeEl.add(new Option(types[i].value, types[i].id));
 
        sizeEl.onchange = calculatePrice;
        typeEl.onchange = calculatePrice;
 
        function calculatePrice() {
            var e = prices.find(function (e) { return e.sizeId == sizeEl.value && e.typeId == typeEl.value; });
            $("#price").text("Цена: " + (e ? e.value : ""));
        }

Запутался как дальше реализовать сложение следующих двух пунктов. Понимаю что аналогично с размером, но как правильно - не могу понять.
Ответить с цитированием