Javascript.RU

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

4 взаимозависимых числовых select'a
С Новым годом, уважаемые форумчане!
Немного пошарив по форуму и просторам ру (и не только) нета, не смог разобраться с, казалось бы, простой задачкой. Оговорюсь сразу, что я только знакомлюсь с js, одновременно решаю реальную задачу, для реального проекта.
Суть задачи:
1. на форме имеем 4 <select> с <option> у первого со значениями от 1 до 9, у второго и третьего - от 0 до 8, у четвертого - от 0 до 2.
2. нужно отследить, чтоб при отправке формы (submit()) сумма значений всех 4 <select> не превышала 9.
3.Количество опций в селектах должно быть взаимозависимым, то есть при выборе в первом, например, значения 4, в остальных нужно запретить выбор значения, превышающего 5, дабы не превысить общей суммой число 9.

Конкретный пример - форма заказа авиабилета с категориями пассажиров (Взрослый, подросток, младенец, младенец без отдельно предоставленного места), естественно, сумма пассажиров в заказе не должна превысить 9.

Буду признателен любым подсказкам.
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 01.01.2015, 19:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Symba87,

Ограничение значений в Select
Ответить с цитированием
  #3 (permalink)  
Старый 01.01.2015, 20:36
Новичок на форуме
Отправить личное сообщение для Symba87 Посмотреть профиль Найти все сообщения от Symba87
 
Регистрация: 01.01.2015
Сообщений: 6

Сообщение от рони Посмотреть сообщение
Symba87,

Ограничение значений в Select
Просто, иногда не хватает хорошего пинка в нужную сторону!
Спасибо!
Ограничился пока что 3 селектами, вроде работает.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
</head>

<body>
<select>
                      <option value="1" selected>1</option>
                      <option value="2">2</option>
                      <option value="3">3</option>
                      <option value="4">4</option>
  	              <option value="5">5</option>
                      <option value="6">6</option>
                      <option value="7">7</option>
                      <option value="8">8</option>
                      <option value="9">9</option>

 </select>
 <select>
                      <option value="0" selected>0</option>


 </select>
  <select>
                      <option value="0" selected>0</option>


 </select>

<script>
var select0 = document.getElementsByTagName('select')[0];
var select1 = document.getElementsByTagName('select')[1];
var select2 = document.getElementsByTagName('select')[2];

    select0.addEventListener('change', function() {
        var i = this.selectedIndex;
        select1.options.length=0
        select2.options.length=1
        for (var k=0; k<9-i; k++)  {
           select1.options[k] = new Option(k, k);
        }
		select1.addEventListener('change', function() {
			var i = this.selectedIndex + select0.selectedIndex;
			select2.options.length=1
			for (var k=0; k<9-i; k++)  {
				select2.options[k] = new Option(k, k);
			}
		});
    });
</script>
</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 01.01.2015, 22:35
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Symba87
Суть задачи:
1. на форме имеем 4 <select> с <option> у первого со значениями от 1 до 9, у второго и третьего - от 0 до 8, у четвертого - от 0 до 2.
2. нужно отследить, чтоб при отправке формы (submit()) сумма значений всех 4 <select> не превышала 9.
3.Количество опций в селектах должно быть взаимозависимым, то есть при выборе в первом, например, значения 4, в остальных нужно запретить выбор значения, превышающего 5, дабы не превысить общей суммой число 9.

Конкретный пример - форма заказа авиабилета с категориями пассажиров (Взрослый, подросток, младенец, младенец без отдельно предоставленного места), естественно, сумма пассажиров в заказе не должна превысить 9.
<div></div>
<script>
function createDependableSelects(obj) {
	obj.selectPointsArray.map(function(spa, index, mas) {
		spa.select = document.createElement("select");
		for ( var i = 0, length = spa.end - spa.start + 1; i < length; i++ ) {
			spa.select.options[i] = new Option(spa.start++);
		}
		obj.parent.appendChild(spa.select);
		spa.select.addEventListener("change", function () {
			var amount = 0;
			mas.map(function (value) {
				amount += value.select.selectedIndex;
			});
			if (amount >= obj.sum) {
				this.selectedIndex = 0; 
				alert("too much");
			}
		});
	});
}

//usage
createDependableSelects({
	selectPointsArray: [
			{start: 1, end: 9},
			{start: 0, end: 8},
			{start: 0, end: 8},
			{start: 0, end: 2}
		],
	parent: document.querySelector("div"),
	sum: 9
});
</script>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать переменную и по её значению сделать выбор из selecta SeGun Элементы интерфейса 9 31.03.2014 22:32
При изменении значения select'a оно меняется, затем сбрасывается. upvasil jQuery 0 16.03.2013 23:47
Надпись меняется в зависимости от SELECTa sitebuilder Общие вопросы Javascript 14 05.04.2012 13:54
2 динамически привязанных selecta gustovskiy Элементы интерфейса 5 28.11.2010 17:05
Народ, помогите ... 2 selecta | передача значений EuGen Элементы интерфейса 2 14.07.2010 05:51