Простенький калькулятор для сайта
Всем привет!
Для начала - я не программист) но посмотрела пару уроков(пока что) на javascript т.к. мне для сайта нужен написать калькулятор, а программисты заломили цены >___< Учитывая что, калькулятор нужно будет постпенно обновлять, добавлять пункты, то я больше потрачу чем заработаю своим горе-сайтом) Так что решила научится сама :victory: Итак) Калькулятор шкафов-купе) Точнее их дверей) Дано. Есть профиль дверей. у него фиксированные цены, зависят от количества дверей и ширины шкафа( цены вот: https://dl.dropboxusercontent.com/u/...46.54%20PM.png Есть наполнение дверей (стекло, зеркало, ДСП и т.д.), цена за метр квадратный. 2 двери нельзя - нельзя при ширине проема больше 2950мм, только 3 и 4. Галочка доставка - добавляет 1000р Галочка установка - умножает количество дверей на 700р. Галочка нанесение пескоструйнх рисунков - 1350 * кол-во дверей. Есть задача которые я не знаю как решить, и прошу у вас совета. 1)Сделать option количества дверей 2 неактивными(или удалить его вообще) при ширине шкафа больше 2950мм. 2)Сделать галочку пескоструные рисунки неактивной если выбран ротанг или ДСП( только для зеркала и стекла это возможно) Есть конечно еще куча идей, но потом. Не ругайте сильно - вот что у меня получилось: <script type="text/javascript"> function calc() { var opt = document.getElementById("2dveri"); var vis = document.getElementById("vis"); var shir = document.getElementById("shir"); var dveri = document.getElementById("dveri"); var fill = document.getElementById("fill"); var dost = document.getElementById("dost"); var ust = document.getElementById("ust"); var result = document.getElementById("result"); var sq = parseInt(shir.value) * parseInt(vis.value); var filling = parseInt(fill.options[fill.selectedIndex].value); var cdveri = parseInt(dveri.options[dveri.selectedIndex].value); var profil; if ((parseInt(shir.value <= 2950) && (cdveri == 2)){ profil = 3960; } else if ((parseInt(shir.value) <= 2950) && (cdveri == 3)){ profil = 4950; } else if ((parseInt(shir.value) <= 2950) && (cdveri == 4)){ profil = 5940; } else if ((parseInt(shir.value) >= 2950) && (cdveri == 3)){ profil = 6930; } else if ((parseInt(shir.value) >= 2950) && (cdveri == 4)){ profil = 7810; } else{ profil = 0; }; var ustanovka = (ust.checked == true) ? parseInt(ust.value) * cdveri : 0; var dostavka = (dost.checked == true) ? parseInt(dost.value) : 0; var risunok; if ((filling == 2 || 3) && (ris.checked == true)) { risunok = parseInt(ris.value) * sq/1000000; } else {risunok = 0; }; var price = 0; price += (Math.ceil(sq * filling/1000000 + profil + dostavka + ustanovka +risunok )) ; result.innerHTML = price;} </script> <input id="vis" type="text" value="2300" onchange="calc()" /> высота, в мм <br/> <input id="shir" type="text" value="2500" onchange="calc()" /> ширина, в мм <br/><b>Наполнение:</b><br/> <select onchange="calc()" id="fill"> <option value="0">Выбрать</option> <option value="1300">Стекло</option> <option value="1500">Зеркало </option> <option value="1400">Ротанг</option> <option value="1400">ДСП</option> </select><br/> <b>Кол-во дверей:</b><br/> <select onchange="calc()" id="dveri"> <option value="0">Выбрать</option> <option id="2dveri" value="2">2</option> <option id="3dveri" value="3">3</option> <option id="4dveri" value="4">4</option> </select><br/> <input type="checkbox" onchange="calc()" value="333" id="dost" /> <label for="dost">Требуется доставка?</label> <br/> <input type="checkbox" onchange="calc()" value="555" id="ust" /> <label for="ust">Требуется установка?</label> <br/> <input type="checkbox" onchange="calc()" value="1350" id="ris" /> <label for="ris"> Нанесение пескоструйных рисунков</label> <div>Примерная стоимость дверей: <span id="result">0</span> руб.</div> Вот ! Жду ваших советов))) Спасибо! :-? |
здесь пропущена закрывающая скобка
if ((parseInt(shir.value <= 2950) && (cdveri == 2)){ Цитата:
Или 0, 3 и 4? Что делать, если у пользователя было выбрано 2 двери, а затем он увеличил ширину проема? Сбрасывать на 0 или увеличивать до 3? |
Проверяйте на расчетах, потому что вот это в вашем коде не учитывается почему-то
Цитата:
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>Калькулятор</title></head> <body> <form id="form" name="form"> <input id="vis" type="text" value="2300" /> высота, в мм <br/> <input id="shir" type="text" value="2500" /> ширина, в мм <br/> <b>Наполнение:</b> <br/> <select id="fill"> <option value="0">Выбрать</option> <option value="1300">Стекло</option> <option value="1500">Зеркало </option> <option value="1400">Ротанг</option> <option value="1400">ДСП</option> </select><br/> <b>Кол-во дверей:</b> <br/> <select id="dveri"> <option value="0">Выбрать</option> <option id="2dveri" value="2">2</option> <option id="3dveri" value="3">3</option> <option id="4dveri" value="4">4</option> </select> <br/> <input type="checkbox" value="1000" id="dost" /> <label for="dost">Требуется доставка?</label> <br/> <input type="checkbox" value="700" id="ust" /> <label for="ust">Требуется установка?</label> <br/> <input type="checkbox" value="1350" id="ris" /> <label for="ris">Нанесение пескоструйных рисунков</label> <div>Примерная стоимость дверей: <span id="result">0</span> руб.</div> </form> <script> document.body.onload = function() { function calc() { var d = document, profil = risunok = ustanovka = dostavka = 0; var vis = +d.getElementById("vis").value, shir = +d.getElementById("shir").value, dveri = d.getElementById("dveri"), fill = d.getElementById("fill"), dost = d.getElementById("dost"), ust = d.getElementById("ust"), ris = d.getElementById("ris"), result = d.getElementById("result"); if(shir > 2950) { if(dveri.options[dveri.selectedIndex].value == '2') { dveri.options[2].selected = true; } d.getElementById('2dveri').style.display = 'none'; } else d.getElementById('2dveri').style.display = ''; if(fill.selectedIndex == 3 || fill.selectedIndex == 4) { ris.checked = false; ris.disabled = true; } else { ris.disabled = false; }; var sq = shir * vis / 1000000, cdveri = +dveri.value; if (shir <= 2950 && cdveri == 2) profil = 3960; else if (shir <= 2950 && cdveri == 3) profil = 4950; else if (shir <= 2950 && cdveri == 4) profil = 5940; else if (shir >= 2950 && cdveri == 3) profil = 6930; else if (shir >= 2950 && cdveri == 4) profil = 7810; if (ust.checked) ustanovka = +ust.value * cdveri; if (dost.checked) dostavka = +dost.value; if (ris.checked) risunok = +ris.value * cdveri; result.innerHTML = Math.ceil(sq * +fill.value + profil + dostavka + ustanovka + risunok ); }; document.form.onchange = calc; calc(); } </script> </body> </html> Цитата:
|
Спасибо! Странно - каким то чудом все таки работал мой код))
http://yarkoyarko.ru/calc.html По поводу дверей. Я посовещелась с мастером на производстве и он мне сказал что двери наилучшим образом делать так: Ширина проема от 600мм до 6000мм. Если пользователь ввел меньше/больше, выводить сообщение что мы не изготоваливаем такие размеры. Ширина проема делится на 1200(это макисмально возможная ширина одной двери) - получается минимальное количество дверей. Больше можно , меньше нельзя. Нарпример, пользователь ввел ширину 2500. Минимальное количество дверей для него - 3. Ширина каждой двери 834мм. Количество дверей макисмальное - пускай будет 10(никто столько не заказывает, но пусть будет...) т.е. от 2 до 10. Вообщем до момента как скрывать/делать неактивными элементы option в selecte мне все более или менее ясно.. Если ширину увеличили, то дверей должно стать например 3, но человек может выбрать и 4 и больше. Главное сделать недоступным то количество дверей при котором ширина одной двери становится больше 1200мм. Вот нашла код где похожа задача(с деактивацией списка). Но немного не та))) Когда выбрана 1 опция то другая опция становится недоступна. http://jsfiddle.net/davidThomas/qE4fN/ Что касается вопроса сколько заламывали цену - от 15 000р. Я начинаю свое дело без денег(их просто нет), которое еще не изветно пойдет или нет, поэтому мне сумма эта неподъемная, и сайт сделала сама на шаблончике) А дальнейшем я конечно сделала бы все в лучшем виде... Спасибо.. |
у меня там стояло value 333 и 555)) я пока писла цифры от балды главное чтоб работали!))
<input type="checkbox" onchange="calc()" value="333" id="dost" /> <input type="checkbox" onchange="calc()" value="555" id="ust" /> |
Цитата:
Цитата:
|
ну видят человек не слишком сведущий) и разводят как лоха ..)
|
о! я только сейчас заметила, что 2 двери стали неактивные) Спасибо!!
Почему то у меня 2ка по прежнему черная - поэтому я не сразу заметила!! может ее както сделать по аналогии с ris.disabled = true;, который серым становится, типа d.getElementById('2dveri').disabled = true; Попробовала подставить- не работает) а нет, работает! |
Вложений: 2
Цитата:
Если выбран ротанг и ДСП, то галочка рисунка становится неактивной. Если до выбора галочка стояла, она автоматически снимается. |
а у меня видно... Браузер Chrome.
Перескакивает автоматически, это да. Выбрать ее невозможно, то есть все верно кроме того что по прежнему видно. Я попробовала через - d.getElementById('2dveri').disabled = true; - становится неактивной серой как и чекбокс пескоструных рисунков. UPD. В Firefox не видно! в Chrome видно, в Safari видно. |
Цитата:
|
Нет еще не все)))) потрепите меня)) я переделала код под новые входные данные. Теперь цена есть за 1 дверь - дверь до 600мм, дверь до 800мм, дверь до 1200(это максимальная возможная ширина двери)
вот что у меня получилось: http://yarkoyarko.ru/calc3.html Проблемы: 1)пока не выбранно количество дверей - получается Infinity. Я думала от деления на 0) Я и убирала 0 из value и заменяла еденицей - не помогло... 2) И автоматическое перескакивание пропало... |
coloboque,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <form id="form" name="form"> <input id="vis" type="text" value="2300" /> высота, в мм <br/> <input id="shir" type="text" value="3800" /> ширина, в мм <br/> <b>Наполнение:</b> <br/> <select id="fill"> <option>Выбрать</option> <option value="1300">Стекло</option> <option value="1500">Зеркало </option> <option value="1400">Ротанг</option> <option value="1400">ДСП</option> </select><br/> <div>Рекомендованное количество дверей: <span id="recdver">0</span> шт.</div> <div>Минимальное количество дверей: <span id="mindver">0</span> шт.</div> <b>Кол-во дверей:</b> <br/> <select id="dveri"> <option value="0">Выбрать</option> <option id="2dveri" value="2">2</option> <option id="3dveri" value="3">3</option> <option id="4dveri" value="4">4</option> <option id="5dveri" value="5">5</option> <option id="6dveri" value="6">6</option> <option id="7dveri" value="7">7</option> <option id="8dveri" value="8">8</option> </select> <div>Ширина 1ой двери: <span id="sh1dver">0</span> мм.</div> <br/> <input type="checkbox" value="1000" id="dost" /> <label for="dost">Требуется доставка?</label> <br/> <input type="checkbox" value="700" id="ust" /> <label for="ust">Требуется установка?</label> <br/> <input type="checkbox" value="1350" id="ris" /> <label for="ris">Нанесение пескоструйных рисунков</label> <div>Примерная стоимость дверей: <span id="result">0</span> руб.</div> </form> <script> document.body.onload = function() { function calc() { var d = document, profil = risunok = ustanovka = dostavka = 0; var vis = +d.getElementById("vis").value, shir = +d.getElementById("shir").value, dveri = d.getElementById("dveri"), fill = d.getElementById("fill"), dost = d.getElementById("dost"), ust = d.getElementById("ust"), ris = d.getElementById("ris"), result = d.getElementById("result"), recvder = d.getElementById("recvder"); mindver = d.getElementById("mindver"); sh1dver = d.getElementById("sh1dver"); if (vis > 2600) {alert('К сожалению, мы производим двери высотой только до 2600мм! Введите другое значение') }; if (shir < 600) {alert('Шкаф слишком узкий!') }; var rec; rec = Math.ceil(shir/800); var mindveri; mindveri = Math.ceil(shir/1200); if(mindveri >= 3) { if(dveri.options[dveri.selectedIndex].value == '2') {dveri.options[2].selected = true;} d.getElementById('2dveri').disabled = true; } else d.getElementById('2dveri').disabled = false; if(mindveri >= 4) { if(dveri.options[dveri.selectedIndex].value == '3') {dveri.options[3].selected = true;} d.getElementById('3dveri').disabled = true; } else d.getElementById('3dveri').disabled = false; if(mindveri >= 5) { if(dveri.options[dveri.selectedIndex].value == '4') {dveri.options[4].selected = true;} d.getElementById('4dveri').disabled = true; } else d.getElementById('4dveri').disabled = false; if(fill.selectedIndex == 3 || fill.selectedIndex == 4) { ris.checked = false; ris.disabled = true; } else { ris.disabled = false; }; var sq = shir * vis / 1000000, cdveri = +dveri.value||mindveri; var shirdver; shirdver = Math.ceil(shir/cdveri); if (shirdver <= 600) profil = 2472 * cdveri; else if (shirdver <= 800) profil = 2666 * cdveri; else if (shirdver <= 1200) profil = 3053.5 * cdveri; if (ust.checked) ustanovka = +ust.value * cdveri; if (dost.checked) dostavka = +dost.value; if (ris.checked) risunok = +ris.value * cdveri; recdver.innerHTML = rec; mindver.innerHTML = mindveri; sh1dver.innerHTML = shirdver; result.innerHTML = Math.ceil(sq +(+fill.value||0) + profil + dostavka + ustanovka + risunok ); }; document.form.onchange = calc; calc(); } </script> </body> </html> |
Цитата:
|
Да и терпеть незнакомых девиц тоже не преветсвуется думаю))Планшет смешные перлы выдает уже не раз)) это еще не самое смешное!!)
Спасибо всем огромное за помощь! Калькулятор объявляю готовым)по крайней мере свою главную функцию он выполняет! |
Добрый день! Решил переделать данный калькулятор для расчета стоимости кровли но т.к. знания поверхностные не могу понять где допустил ошибки. Сильно не ругайте все пытался делать методом тыка.
Вроде считает общую сумму но немогу настроить вывод кол-ва листов шифера и стоимости 1 шт. в зависимости от цвета. Подскажите, что я упустил или чего перебрал? )) И как можно сделать так чтобы подсчет выводился сразу при вводе площади, а не по клику в другой области? вывод количества листов считается S/1.336 m. Может кому потом пригодятся подобные наработки) <!DOCTYPE HTML> <html> <head> <title>Калькулятор - расчет стоимости кровли</title> <meta charset="utf-8"> </head> <body> <form id="form" name="form"> <br/> <input type="radio" id="color1" name="cena" value="272" checked />Серый <input type="radio" id="color2" name="cena" value="285" />Красный <input type="radio" id="color3" name="cena" value="275" />Зеленый <input type="radio" id="color4" name="cena" value="235" />Сланец <br/><br/> <b> ПЛОЩАДЬ КРОВЛИ:</b> <input id="area" type="text" value="5" /> <b>м2</b> <br/> <br/> <div>Цена: <span id="cena">0</span> руб.</div> <div>Рекомендованное количество шифера: <span id="kol">0</span> шт.</div> <div>Сумма: <span id="result">0</span> руб.</div> </form> <script> document.body.onload = function() { function calc() { var d = document, cena = color1 = color2 = color3 = color4 = 0; var area = +d.getElementById("area").value, color1 = d.getElementById("color1"), color2 = d.getElementById("color2"), color3 = d.getElementById("color3"), color4 = d.getElementById("color4"), result = d.getElementById("result"), kol = d.getElementById("kol"); if (area > 90000) {alert('Вы уверены в правильности введенных данных? Введите другое значение') }; if (area < 2) {alert('Площадь слишком мала!') }; var kol; kol = Math.ceil(area/1.336); if (color1.checked) cena = +color1.value; if (color2.checked) cena = +color2.value; if (color3.checked) cena = +color3.value; if (color4.checked) cena = +color3.value; kol.innerHTML = Math.ceil(area/1.336); cena.innerHTML = cena; result.innerHTML = Math.ceil(kol * cena); }; document.form.onchange = calc; calc(); } </script> </body> </html> |
Цитата:
Цитата:
Цитата:
document.getElementById("area").oninput = calc; |
Цитата:
Скрипт начал выводить кол-во шифера и сумму, но никак не могу заставить его выводить значение цены товара в зависимости от выбора радио кнопки. поскажите, что у меня там опять не так? <form id="form" name="form"> <div class="calc-bgarea"> <input type="radio" id="color1" name="cena" value="100" checked />Серый <input type="radio" id="color2" name="cena" value="285" />Красный<br/> <input type="radio" id="color3" name="cena" value="275" />Зеленый <input type="radio" id="color4" name="cena" value="235" />Сланец <br/> <br/> <b> ПЛОЩАДЬ КРОВЛИ:</b> <input id="area" type="text" value="5" /> <b>M<sup>2</sup></b> <br/> <br/> </div> <div class="calc-bg2"> пример сообщения </div> <div class="calc-bgtotal"> Цена: <br> Кол-во листов: <br> Итого: <br> <div class="calc-bgtotal2"> <span id="cena">0</span> руб.<br> <span id="kol">0</span> шт.<br> <span id="result">0</span> руб. </div> </div> </form> <script> document.body.onload = function() { function calc() { var d = document, cena = color1 = color2 = color3 = color4 = 0; var areaa = +d.getElementById("area").value, color1 = d.getElementById("color1"), color2 = d.getElementById("color2"), color3 = d.getElementById("color3"), color4 = d.getElementById("color4"), result = d.getElementById("result"), kol = d.getElementById("kol"); var kolich; kolich = Math.ceil(areaa/1.336); if (color1.checked) cena = +color1.value; if (color2.checked) cena = +color2.value; if (color3.checked) cena = +color3.value; if (color4.checked) cena = +color4.value; kol.innerHTML = Math.ceil(areaa/1.336); cena.innerHTML = cena; result.innerHTML = Math.ceil(kolich * cena); }; document.form.onchange = calc; document.getElementById("area").oninput = calc; calc(); } </script> |
Цитата:
Цитата:
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <form id="form" name="form"> <div class="calc-bgarea"> <input type="radio" id="color1" name="cena" value="100" checked />Серый <input type="radio" id="color2" name="cena" value="285" />Красный<br/> <input type="radio" id="color3" name="cena" value="275" />Зеленый <input type="radio" id="color4" name="cena" value="235" />Сланец <br/> <br/> <b> ПЛОЩАДЬ КРОВЛИ:</b> <input id="area" type="text" value="5" /> <b>M<sup>2</sup></b> <br/> <br/> </div> <div class="calc-bg2"> пример сообщения </div> <div class="calc-bgtotal"> Цена: <span id="cena">0</span> руб.<br> Кол-во листов: <span id="kol">0</span> шт.<br> Итого: <span id="result">0</span> руб.<br> </div> </form> <script> document.body.onload = function() { function calc() { var d = document, price = 0; areaa = +d.getElementById("area").value, kolich = Math.ceil(areaa/1.336), color1 = d.getElementById("color1"), color2 = d.getElementById("color2"), color3 = d.getElementById("color3"), color4 = d.getElementById("color4"), result = d.getElementById("result"), kol = d.getElementById("kol"); if (color1.checked) price = +color1.value; if (color2.checked) price = +color2.value; if (color3.checked) price = +color3.value; if (color4.checked) price = +color4.value; kol.innerHTML = kolich; cena.innerHTML = price; result.innerHTML = Math.ceil(kolich * price); }; document.form.onchange = calc; document.getElementById("area").oninput = calc; calc(); } </script> </body> </html> |
Часовой пояс GMT +3, время: 11:03. |