Скрыть/показать элементы в зависимости от значения select
Необходимо отображать несколько полей в зависимости от выбранного значения в select. Это необходимо для работы в OTRS, поэтому сами элементы не могу редактировать, в шаблон могу добавить только дополнительный js файл,
Есть селект <select id="Dest" class="Validate_Required " name="Dest" aria-required="true"> <option value="||-" selected="selected">-</option> <option value="5||Компьютеры и периферийное оборудование">Компьютеры и периферийное оборудование</option> <option value="12||Корпоративный портал и электронная почта">Корпоративный портал и электронная почта</option> <option value="9||Оборудование для мероприятий">Оборудование для мероприятий</option> </select> Необходимо например если выбран пункт "5||Компьютеры и периферийное оборудование" отображались элементы <label id="LabelArticleFreeText2">Инв.№ основного средства</label> <input id="ArticleFreeText2" class="ArticleFreeText " type="text" value="" name="ArticleFreeText2"> а если нет, то скрывались. |
Что-то тип такое
<select id="Dest" class="Validate_Required " name="Dest" aria-required="true" onChange="Selected(this)"> <option value="0" selected="selected">-</option> <option value="1">Компьютеры и периферийное оборудование</option> <option value="2">Корпоративный портал и электронная почта</option> <option value="3">Оборудование для мероприятий</option> </select> <div id='Label1' style='display: none;'> Перечисляешь "Компьютеры и периферийное оборудование" </div> <div id='Label2' style='display: none;'> Перечисляешь "Корпоративный портал и электронная почта" </div> <div id='Label3' style='display: none;'> Перечисляешь "Оборудование для мероприятий" </div> и сама функция function Selected(a) { var label = a.value; if (label==1) { document.getElementById("Label1").style.display='block'; document.getElementById("Label2").style.display='none'; document.getElementById("Label3").style.display='none'; } else if (label==2) { document.getElementById("Label1").style.display='none'; document.getElementById("Label2").style.display='block'; document.getElementById("Label3").style.display='none'; } else if (label==3) { document.getElementById("Label1").style.display='none'; document.getElementById("Label2").style.display='none'; document.getElementById("Label3").style.display='block'; } else { document.getElementById("Label1").style.display='none'; document.getElementById("Label2").style.display='none'; document.getElementById("Label3").style.display='none'; } } |
Здравствуйте. У меня аналогичная задача. Надо сделать таблицу из четырех колонок, в трех из которых будет отображаться информация в зависимости от выбранного select`а.
Часть кода страницы: <table class="table_header" border="0"> <tbody> <tr> <td> </td> <td> <div> <select onChange="Selected(this)"> <option value="1" selected="selected">Выберите комплектацию</option> <option value="2">LT 1.6 AT Base</option> <option value="3">LT 1.6 AT Comfort Pack</option> <option value="4">LT 1.6 AT Alloy Wheels Pack</option> <option value="5">LT 1.6 AT Comfort and Alloy Wheels Pack</option> <option value="6">LTZ 1.6 AT</option> </select> </div> </td> <td> <div> <select aria-required="true" onChange="Selectedb(this)"> <option value="1">Выберите комплектацию</option> <option value="2">LT 1.6 AT Base</option> <option value="3">LT 1.6 AT Comfort Pack</option> <option value="4">LT 1.6 AT Alloy Wheels Pack</option> <option value="5">LT 1.6 AT Comfort and Alloy Wheels Pack</option> <option value="6">LTZ 1.6 AT</option> </select> </div> </td> <td> <div> <select aria-required="true" onChange="Selectedc(this)"> <option value="1">Выберите комплектацию</option> <option value="2">LT 1.6 AT Base</option> <option value="3">LT 1.6 AT Comfort Pack</option> <option value="4">LT 1.6 AT Alloy Wheels Pack</option> <option value="5">LT 1.6 AT Comfort and Alloy Wheels Pack</option> <option value="6">LTZ 1.6 AT</option> </select> </div> </td> </tr> </tbody> </table> <div class="hideWrap"> <a class="hideBtn" title="Показать\Скрыть блок" href="javascript://">Характеристики</a> <div class="hideCont"> <table class="harakt" border="0" cellspacing="0" cellpadding="0"> <thead> <tr> <td> <div name="label1" style="display:none;"> </div> <div name="label2" style="display:none;">LT 1.6 AT Base</div> <div name="label3" style="display:none;">LT 1.6 AT Comfort Pack</div> <div name="label4" style="display:none;">LT 1.6 AT Alloy Wheels Pack</div> <div name="label5" style="display:none;">LT 1.6 AT Comfort and Alloy Wheels Pack</div> <div name="label6" style="display:none;">LTZ 1.6 AT</div> </td> <td> <div name="labela1" style="display:none;"> </div> <div name="labela2" style="display:none;">LT 1.6 AT Base</div> <div name="labela3" style="display:none;">LT 1.6 AT Comfort Pack</div> <div name="labela4" style="display:none;">LT 1.6 AT Alloy Wheels Pack</div> <div name="labela5" style="display:none;">LT 1.6 AT Comfort and Alloy Wheels Pack</div> <div name="labela6" style="display:none;">LTZ 1.6 AT</div> </td> <td> <div name="labelb1" style="display:none;"> </div> <div name="labelb2" style="display:none;">LT 1.6 AT Base</div> <div name="labelb3" style="display:none;">LT 1.6 AT Comfort Pack</div> <div name="labelb4" style="display:none;">LT 1.6 AT Alloy Wheels Pack</div> <div name="labelb5" style="display:none;">LT 1.6 AT Comfort and Alloy Wheels Pack</div> <div name="labelb6" style="display:none;">LTZ 1.6 AT</div> </td> </tr> </thead> <tbody> <tr> <td>Трансмиссия </td> <td> <div name="label1" style="display:none;"> </div> <div name="label2" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="label3" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="label4" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="label5" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="label6" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> </td> <td> <div name="labela1" style="display:none;"> </div> <div name="labela2" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="labela3" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="labela4" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="labela5" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="labela6" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> </td> <td> <div name="labelb1" style="display:none;"> </div> <div name="labelb2" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="labelb3" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="labelb4" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="labelb5" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> <div name="labelb6" style="display:none;">Автоматическая 6-ступенчатая коробка передач</div> </td> </tr> Сам javascript: function Selected(a) { var label = a.value; if (label==1) { document.getElementsByName("label1").style.display='block'; document.getElementsByName("label2").style.display='none'; document.getElementsByName("label3").style.display='none'; document.getElementsByName("label4").style.display='none'; document.getElementsByName("label5").style.display='none'; document.getElementsByName("label6").style.display='none'; } else if (label==2) { document.getElementsByName("label1").style.display="none"; document.getElementsByName("label2").style.display="block"; document.getElementsByName("label3").style.display='none'; document.getElementsByName("label4").style.display='none'; document.getElementsByName("label5").style.display='none'; document.getElementsByName("label6").style.display='none'; } else if (label==3) { document.getElementsByName("label1").style.display='none'; document.getElementsByName("label2").style.display='none'; document.getElementsByName("label3").style.display='block'; document.getElementsByName("label4").style.display='none'; document.getElementsByName("label5").style.display='none'; document.getElementsByName("label6").style.display='none'; } else if (label==4) { document.getElementsByName("label1").style.display='none'; document.getElementsByName("label2").style.display='none'; document.getElementsByName("label3").style.display='none'; document.getElementsByName("label4").style.display='block'; document.getElementsByName("label5").style.display='none'; document.getElementsByName("label6").style.display='none'; } else if (label==5) { document.getElementsByName("label1").style.display='none'; document.getElementsByName("label2").style.display='none'; document.getElementsByName("label3").style.display='none'; document.getElementsByName("label5").style.display='block'; document.getElementsByName("label4").style.display='none'; document.getElementsByName("label6").style.display='none'; } else if (label==6) { document.getElementsByName("label1").style.display='none'; document.getElementsByName("label2").style.display='none'; document.getElementsByName("label3").style.display='none'; document.getElementsByName("label6").style.display='block'; document.getElementsByName("label5").style.display='none'; document.getElementsByName("label4").style.display='none'; } else { document.getElementsByName("label1").style.display='block'; document.getElementsByName("label2").style.display='none'; document.getElementsByName("label3").style.display='none'; document.getElementsByName("label4").style.display='none'; document.getElementsByName("label5").style.display='none'; document.getElementsByName("label6").style.display='none'; } } Для каждого select`а меняется только название функции и названия атрибута name. При выполненни функции FireBag выдает TypeError: document.getElementsByName(...).style is undefined. Помогите пожалуйста решить проблемму. |
werwolf4,
нет у группы элементов свойства style -- а у одного элемента есть - когда прочитаите документацию на то у чего нет style узнаите ответ на свой вопрос |
KingStar, представляю алгоритм, когда в меню будет 20-30 элементов ))
|
Спасибо Рони за подсказку.
Все исправил. Теперь скрип выглядит так: function Selected(a) { var label = a.value; if (label==1) { var i = 0 while (i<100){ document.getElementsByName("label1")[i].style.display='block'; document.getElementsByName("label2")[i].style.display='none'; document.getElementsByName("label3")[i].style.display='none'; document.getElementsByName("label4")[i].style.display='none'; document.getElementsByName("label5")[i].style.display='none'; document.getElementsByName("label6")[i].style.display='none'; i++; } } else if (label==2) { var i = 0 while (i<100){ document.getElementsByName("label1")[i].style.display='none';; document.getElementsByName("label2")[i].style.display='block';; document.getElementsByName("label3")[i].style.display='none'; document.getElementsByName("label4")[i].style.display='none'; document.getElementsByName("label5")[i].style.display='none'; document.getElementsByName("label6")[i].style.display='none'; i++; } ... Немного великоват. ))) Хотел сделать так: function Selected(a) { var label = a.value; var y=label; var x=label-1; var nameClass while (y==label){ nameClass = "label" + y; var i = 0; while (i<100){ document.getElementsByName(nameClass)[i].style.display='display'; } } while (y<100){ i = 0; y++; nameClass = "label".y; while(i<100){ document.getElementsByName(nameClass)[i].style.display='block'; } } while (x>0){ i = 0; nameClass = "label".x; while(i<100){ document.getElementsByName(nameClass)[i].style.display='block'; } x--; } } но не знаю как правильно подставить в document.getElementsByName(nameClass) название класса с порядковым номером. |
werwolf4,
:write: <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> td,select{ width: 150px; } .harakt td div{ display: none; } </style> <script> window.onload = function () { var a = document.querySelectorAll("select"); Array.prototype.forEach.call(a, function (a, c) { a.onchange = function () { var a = document.querySelectorAll(".harakt thead td:nth-child(" + (c + 2) + ") div"), d = this.selectedIndex || 0; Array.prototype.forEach.call(a, function (a, b) { a.style.display = b == d ? "block" : "none" }); a = document.querySelectorAll(".harakt tbody td:nth-child(" + (c + 2) + ") div"); Array.prototype.forEach.call(a, function (a, b) { a.style.display = b == d ? "block" : "none" }) } }) }; </script> </head> <body> <table class="table_header" border="0"> <tbody> <tr> <td>Трансмиссия </td> <td> <div> <select> <option value="1" selected="selected">Выберите комплектацию</option> <option value="2">LT 1.6 AT Base</option> <option value="3">LT 1.6 AT Comfort Pack</option> <option value="4">LT 1.6 AT Alloy Wheels Pack</option> <option value="5">LT 1.6 AT Comfort and Alloy Wheels Pack</option> <option value="6">LTZ 1.6 AT</option> </select> </div> </td> <td> <div> <select> <option value="1">Выберите комплектацию</option> <option value="2">LT 1.6 AT Base</option> <option value="3">LT 1.6 AT Comfort Pack</option> <option value="4">LT 1.6 AT Alloy Wheels Pack</option> <option value="5">LT 1.6 AT Comfort and Alloy Wheels Pack</option> <option value="6">LTZ 1.6 AT</option> </select> </div> </td> <td> <div> <select> <option value="1">Выберите комплектацию</option> <option value="2">LT 1.6 AT Base</option> <option value="3">LT 1.6 AT Comfort Pack</option> <option value="4">LT 1.6 AT Alloy Wheels Pack</option> <option value="5">LT 1.6 AT Comfort and Alloy Wheels Pack</option> <option value="6">LTZ 1.6 AT</option> </select> </div> </td> </tr> </tbody> </table> <table class="harakt" border="0" cellspacing="0" cellpadding="0"> <thead> <tr><td>Трансмиссия </td> <td> <div></div> <div>LT 1.6 AT Base</div> <div>LT 1.6 AT Comfort Pack</div> <div>LT 1.6 AT Alloy Wheels Pack</div> <div>LT 1.6 AT Comfort and Alloy Wheels Pack</div> <div>LTZ 1.6 AT</div> </td> <td> <div></div> <div>LT 1.6 AT Base</div> <div>LT 1.6 AT Comfort Pack</div> <div>LT 1.6 AT Alloy Wheels Pack</div> <div>LT 1.6 AT Comfort and Alloy Wheels Pack</div> <div>LTZ 1.6 AT</div> </td> <td> <div></div> <div>LT 1.6 AT Base</div> <div>LT 1.6 AT Comfort Pack</div> <div>LT 1.6 AT Alloy Wheels Pack</div> <div>LT 1.6 AT Comfort and Alloy Wheels Pack</div> <div>LTZ 1.6 AT</div> </td> </tr> </thead> <tbody> <tr> <td>Трансмиссия </td> <td> <div></div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> </td> <td> <div></div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> </td> <td> <div></div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> <div>Автоматическая 6-ступенчатая коробка передач</div> </td> </tr> </tbody> </table> </body> </html> |
Спасибо.
|
Вложений: 1
Рони еще раз спасибо за помощь.
Я немного изменил Ваш код так как в таблице может быть до 15 строк. Но теперь столкнулся с такой проблемой что на одной странице может быть несколько таблиц, содержимое которых выбирается. Как на этой странице: http://www.chevrolet.ru/avtomobili/c...els-specs.html. Измененный javascript: window.onload = function () { var a = document.querySelectorAll("select"); Array.prototype.forEach.call(a, function (a, c) { a.onchange = function () { var a = document.querySelectorAll(".harakt thead td:nth-child(" + (c + 2) + ") div"), d = this.selectedIndex || 0; Array.prototype.forEach.call(a, function (a, b) { a.style.display = b == d ? "block" : "none" }); for(var i=1; i<15; i++) { a = document.querySelectorAll(".harakt tbody tr:nth-child(" + (i) + ") td:nth-child(" + (c + 2) + ") div"); Array.prototype.forEach.call(a, function (a, b) { a.style.display = b == d ? "block" : "none" }) } } }) }; Код страницы с двумя таблицами во вложении. Сам баян на сайте уже есть. :help: |
werwolf4,
в чём проблемато? какой баян? |
Часовой пояс GMT +3, время: 11:33. |