На сегодняшний день различные калькуляторы, конфигураторы, считалки, помощники выбора имеют огромную популярность, так как одновременно решают сразу несколько задач:

  • позволяют представить информацию в максимально удобном виде;
  • могут положительно влиять на конверсию сайта;
  • повышают поведенческие факторы по SEO;
  • в конце концов делают страницу интереснее для пользователя;
  • и многое другое.

Сегодня мы рассмотрим несколько примеров использования различных элементов ввода, существующих в HTML, и научимся оперировать их данными.

А именно:

- простое поле ввода; тег <input> в HTML

- раскрывающийся список, тег <select> в HTML

- переключатель; тег <input type="radio"> в HTML

- переключатель; тег <input type="checkbox"> в HTML

- кнопка;

По идее, этих базовых элементов вполне достаточно для создания простых калькуляторов.

Для примера сделаем следующее: число из первого поля будет умножаться на параметр из раскрывающегося списка, складываться с числом, выбранным на переключателе и делиться на последний переключатель. По кнопке "ОК" будет производиться расчет. Делать будем максимально просто и понятно, поэтому будут лишние циклы и переменные, но наша задача - понять принцип действия.

Считалка

- сюда вводим число;

- умножим на это число;

10
20 - прибавим одно из этих чисел
30

2
5 - разделим на эти числа
10













Реализация:

HTML:
<div>
	<input value="10" type="number" id="chislo"> - сюда вводим число; <br /> <br /> <!-- id="chislo" - уникальный идентификатор, по нему мы будем обращаться, чтобы выцепить данные из поля -->
	
	<select id="spisok"> <!-- id="spisok" - уникальный идентификатор, по нему мы будем обращаться, чтобы выцепить данные из полей выбора -->
		<option value="1">1</option>
		<option value="2" selected>2</option>  <!-- аттрибут selected отвечает за пункт, выбранный по умолчанию -->
		<option value="3">3</option> <!-- value = значения, которые соответствуют пунктам списка. -->
		<option value="4">4</option>
	</select> - умножим на это число; <br /> <br />
	
	<input type="radio" value="10" name="n2" checked> 10 <br /> <!-- обратите внимание, что у всех type="radio" должен быть одинаковый аттрибут name="n2", это позволяет объединить их в группу. Знакомый нам аттрибут value также содержит в себе значение, соответствующее данному пункту -->
	<input type="radio" value="20" name="n2"> 20 - прибавим одно из этих чисел<br />
	<input type="radio" value="30" name="n2"> 30 <br /> <br /> 
	
	<input value="2" class="checkbox" type="checkbox" checked> 2 <br />
	<input value="5" class="checkbox" type="checkbox"> 5 - разделим на эти числа <br />
	<input value="10" class="checkbox" type="checkbox"> 10 <br /> <br /> <!-- и снова в value пишем значение, соответствующее данному пункту -->
 
	<button onclick="Start();">Рассчитать!</button>	<br/> <br /> <!-- задаем выполнение функции Start при клике на кнопку -->
	
	<div style="font-weight:bold" id="result"></div> <!-- контейнер для вывода результатов -->
</div>


JavaScript:
<script>
	function Start(){
		var chislo = document.getElementById('chislo').value; //выцепляем значение value первого вводимого поля
		var spisok = document.getElementById('spisok').value; //выцепляем значение value множителя из списка
		
		var radios = document.getElementsByName('n2'); //определяем какой из пунктов выбран и запоминаем его value в переменную radio
		for (var i = 0; i < radios.length; i++) {
			if (radios[i].type == "radio" && radios[i].checked) {
			 	var radio = parseInt ( radios[i].value );
			}
		}
		
		var checkboxes = document.getElementsByClassName('checkbox'); //определяем какие из "галочек" выбраны и запоминаем их value в массив checkbox
		checkbox = []; // задаем пустой массив checkbox
		for (var i = 0; i < checkboxes.length; i++) {
			if (checkboxes[i].type == "checkbox" && checkboxes[i].checked) {
				checkbox[checkbox.length] = checkboxes[i].value;	//дописываем к массиву checkbox значение value, если оно выбрано	
			}
		}
		
		var result = chislo * spisok + 	radio; //элемент первого поля умножаем на значение из списка и прибавляем значение из следующего списка. Промежуточный результат сохраняем в result
		
		for ( var i = 0; i< checkbox.length; i++ ){ //последовательно в цикле делим промежуточный результат result на каждый из элементов массива checkbox (значения value отмеченных галочками пунктов)
			result = result / checkbox[i]; //и снова пишем в переменную result
		}
		
		document.getElementById('result').innerHTML = 'Результат: ' + result; //выводим получившееся значение в div с id="result"
	}
</script>

Скачать исходный код