Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.10.2013, 21:13
Новичок на форуме
Отправить личное сообщение для coloboque Посмотреть профиль Найти все сообщения от coloboque
 
Регистрация: 20.10.2013
Сообщений: 8

Простенький калькулятор для сайта
Всем привет!
Для начала - я не программист) но посмотрела пару уроков(пока что) на javascript т.к. мне для сайта нужен написать калькулятор, а программисты заломили цены >___<
Учитывая что, калькулятор нужно будет постпенно обновлять, добавлять пункты, то я больше потрачу чем заработаю своим горе-сайтом) Так что решила научится сама

Итак) Калькулятор шкафов-купе) Точнее их дверей)
Дано. Есть профиль дверей. у него фиксированные цены, зависят от количества дверей и ширины шкафа( цены вот:
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>



Вот ! Жду ваших советов))) Спасибо!

Последний раз редактировалось coloboque, 20.10.2013 в 21:52.
Ответить с цитированием
  #2 (permalink)  
Старый 20.10.2013, 23:03
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

здесь пропущена закрывающая скобка
if ((parseInt(shir.value <= 2950) && (cdveri == 2)){


Сообщение от coloboque
2 двери нельзя - нельзя при ширине проема больше 2950мм, только 3 и 4.
Только 3 и 4?
Или 0, 3 и 4?
Что делать, если у пользователя было выбрано 2 двери, а затем он увеличил ширину проема? Сбрасывать на 0 или увеличивать до 3?
Ответить с цитированием
  #3 (permalink)  
Старый 21.10.2013, 01:15
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Проверяйте на расчетах, потому что вот это в вашем коде не учитывается почему-то
Сообщение от coloboque
Галочка доставка - добавляет 1000р
Галочка установка - умножает количество дверей на 700р.
Галочка нанесение пескоструйнх рисунков - 1350 * кол-во дверей.
<!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>

Сообщение от coloboque
программисты заломили цены >___<
А можно узнать сколько заломили?
Ответить с цитированием
  #4 (permalink)  
Старый 21.10.2013, 14:49
Новичок на форуме
Отправить личное сообщение для coloboque Посмотреть профиль Найти все сообщения от coloboque
 
Регистрация: 20.10.2013
Сообщений: 8

Спасибо! Странно - каким то чудом все таки работал мой код))
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р.
Я начинаю свое дело без денег(их просто нет), которое еще не изветно пойдет или нет, поэтому мне сумма эта неподъемная, и сайт сделала сама на шаблончике) А дальнейшем я конечно сделала бы все в лучшем виде...

Спасибо..
Ответить с цитированием
  #5 (permalink)  
Старый 21.10.2013, 14:51
Новичок на форуме
Отправить личное сообщение для coloboque Посмотреть профиль Найти все сообщения от coloboque
 
Регистрация: 20.10.2013
Сообщений: 8

у меня там стояло value 333 и 555)) я пока писла цифры от балды главное чтоб работали!))
<input type="checkbox" onchange="calc()" value="333" id="dost" />
<input type="checkbox" onchange="calc()" value="555" id="ust" />
Ответить с цитированием
  #6 (permalink)  
Старый 21.10.2013, 14:55
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от coloboque
Если ширину увеличили, то дверей должно стать например 3, но человек может выбрать и 4 и больше.
я так и сделал вроде в скрипте.
Сообщение от coloboque
Что касается вопроса сколько заламывали цену - от 15 000р.
да, имхо это много за полчаса-час работы. В следующий раз обращайтесь, сойдемся в цене
Ответить с цитированием
  #7 (permalink)  
Старый 21.10.2013, 15:56
Новичок на форуме
Отправить личное сообщение для coloboque Посмотреть профиль Найти все сообщения от coloboque
 
Регистрация: 20.10.2013
Сообщений: 8

ну видят человек не слишком сведущий) и разводят как лоха ..)
Ответить с цитированием
  #8 (permalink)  
Старый 21.10.2013, 16:24
Новичок на форуме
Отправить личное сообщение для coloboque Посмотреть профиль Найти все сообщения от coloboque
 
Регистрация: 20.10.2013
Сообщений: 8

о! я только сейчас заметила, что 2 двери стали неактивные) Спасибо!!
Почему то у меня 2ка по прежнему черная - поэтому я не сразу заметила!! может ее както сделать по аналогии с ris.disabled = true;, который серым становится,
типа
d.getElementById('2dveri').disabled = true;
Попробовала подставить- не работает)

а нет, работает!

Последний раз редактировалось coloboque, 21.10.2013 в 17:07.
Ответить с цитированием
  #9 (permalink)  
Старый 21.10.2013, 17:04
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от coloboque
Почему то у меня 2ка по прежнему черная - поэтому я не сразу заметила!!
хм... у меня вот так: если ширина большая, то 2ки нет в выборе. При этом если до того, как ширина стала большой, была выбрана 2ка, выбор автоматически переключается на 3ку
Если выбран ротанг и ДСП, то галочка рисунка становится неактивной. Если до выбора галочка стояла, она автоматически снимается.
Изображения:
Тип файла: png Image 1.png (5.4 Кб, 3 просмотров)
Тип файла: png Image 2.png (6.8 Кб, 2 просмотров)
Ответить с цитированием
  #10 (permalink)  
Старый 21.10.2013, 17:12
Новичок на форуме
Отправить личное сообщение для coloboque Посмотреть профиль Найти все сообщения от coloboque
 
Регистрация: 20.10.2013
Сообщений: 8

а у меня видно... Браузер Chrome.

Перескакивает автоматически, это да. Выбрать ее невозможно, то есть все верно кроме того что по прежнему видно.

Я попробовала через - d.getElementById('2dveri').disabled = true; - становится неактивной серой как и чекбокс пескоструных рисунков.

UPD. В Firefox не видно! в Chrome видно, в Safari видно.

Последний раз редактировалось coloboque, 21.10.2013 в 17:18.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Календарь с нерабочими днями для сайта dartwlad jQuery 9 26.04.2013 10:36
Поиск решения для сайта hell_chief Оффтопик 7 16.03.2013 22:18
ajax ссылки для сайта l-liava-l Оффтопик 19 23.02.2013 17:20
opera6.ini настройки для сайта cool Opera, Safari и др. 0 21.01.2011 12:15
Картинки для сайта mycoding (X)HTML/CSS 1 13.04.2010 09:52