Здравствуйте!
Нужна помощь с калькулятором.
Задача у меня такая:
Пытаюсь собрать калькулятор, не могу придумать алгоритм.
Цена зависит от таких факторов - размер, тип, упаковка, рамка. Все это уже предусмотренно, и конкретные размеры, тип, пользователю предоставляется только выбор.
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 : ""));
}
Запутался как дальше реализовать сложение следующих двух пунктов. Понимаю что аналогично с размером, но как правильно - не могу понять.