4 взаимозависимых числовых select'a
С Новым годом, уважаемые форумчане!
Немного пошарив по форуму и просторам ру (и не только) нета, не смог разобраться с, казалось бы, простой задачкой. Оговорюсь сразу, что я только знакомлюсь с js, одновременно решаю реальную задачу, для реального проекта. Суть задачи: 1. на форме имеем 4 <select> с <option> у первого со значениями от 1 до 9, у второго и третьего - от 0 до 8, у четвертого - от 0 до 2. 2. нужно отследить, чтоб при отправке формы (submit()) сумма значений всех 4 <select> не превышала 9. 3.Количество опций в селектах должно быть взаимозависимым, то есть при выборе в первом, например, значения 4, в остальных нужно запретить выбор значения, превышающего 5, дабы не превысить общей суммой число 9. Конкретный пример - форма заказа авиабилета с категориями пассажиров (Взрослый, подросток, младенец, младенец без отдельно предоставленного места), естественно, сумма пассажиров в заказе не должна превысить 9. Буду признателен любым подсказкам. Спасибо! |
|
Цитата:
Спасибо!:D Ограничился пока что 3 селектами, вроде работает.:dance: <!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> |
Цитата:
<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> |
Часовой пояс GMT +3, время: 08:51. |