Динамический select

FireMaster

Guest
Динамический select

Есть форма, большая форма, в ней около 15 полей, построена она с помощью обыкновенных HTML таблиц, в данной форме имеется несколько полей типа select, задача: при смене варианта в select`e открывать дополнительные поля select, например:
<tr><td>
<select name="blah"><option value=""><option value="raz-raz">raz-raz<option value="dva-dva">dva-dva</select>
</td></tr>

по дефолту у нас ничего не выбрано, если пользователь тыкает raz-raz то опять же ничего не появляется, но если он выбирает dva-dva то под этим select`om появляются еще 2 штуки:
<tr><td>
<select name="blahA"><option value=""><option value="hejhej">hejhej<option value="ee">ee</select>
</td></tr>
<tr><td>
<select name="blahB"><option value=""><option value="sup">sup<option value="yada">yada</select>
</td></tr>

После долгих экспериментов я пришел к вот этому скрипту
<script>
<!--
if (document.layers) {
visible='show';
hidden='hide';
} else {
if (document.all) {
visible='visible';
hidden='hidden';
}
}
function priniat_nepriniat(selected) {
if (selected == "dva-dva") {
if (document.all) {
selectitem = document.all["selection"].style;
}
if (selectitem.visibility==hidden) {
selectitem.visibility=visible;
}
} else {
if (document.all) {
selectitem = document.all["selection"].style;
}
selectitem.visibility=hidden;
}
}
-->
</script>

мысль думаю понятна, используем <div> и по событию селекта onChange делаем его видимым или невидимым, НО во-первых по скольку форма у меня большая, и все сделано через таблицу, то <div> тэги <td> и <tr> игнорирует, а описывать для каждого selecta <div>`ы это извращение, а во-вторых когда <div> невидимый то место просто пустует, поэтому если у кого-то есть мысли по поводу решения проблемы, которую я описал, пожалуйста выскажитесь. Спасибо.
 

Mr.Ak

Guest
вместо style.visibility='hidden' используй
style.display='none' style.block

еще мощно через innerText
 

Geol

Пациент
Сугубо личное мнение, но я бы в данном случае использовал showModalDialog()
 

FireMaster

Guest
Автор оригинала: Mr.Ak
вместо style.visibility='hidden' используй
style.display='none' style.block
Одна фигня, не работает это для таблиц.
еще мощно через innerText
А это как ?
Автор оригинала: Geol
Сугубо личное мнение, но я бы в данном случае использовал showModalDialog()
К сожалению, не знал, что это такое и полез в msdn, нашел DhWindow.showModalDialog, но судя из описания и примеров работы - это совсем не то что мне требуется.

Если у кого-то все-таки есть еще идеи, пожалуйста, выскажитесь, очень надо решить данную проблему.
 

Mr.Ak

Guest
Нет дружок это смотря откуда ручки растут
Читай ман

и вот тебе примерчик:
<script language='JavaScript'>
function chng(){
document.getElementById('cell'+sel.value).style.display='block'
}
</script>

<body>
<table width=300>
<tr id=cell>
<td><select onchange='chng()' name=sel><option value=1>Ячейка 1</option><option value=2>Ячейка 2</option></select></td>
</tr>
<tr id=cell1 style='display:none'>
<td><select><option>TEST 1</option></select></td>
</tr>
<tr id=cell2 style='display:none'>
<td><select><option>TEST 2</option></select></td>
</tr>
<tr>
<td></td>
</tr>
</table>
 

FireMaster

Guest
Действительно, перепроверил свой код, и оказалось, что неработало из-за того, что я написал в одном месте не display а displya :) Извини, что не разобравшись, стал вопить тут. И кстати спасибо за подсказку с display, без тебя бы не разобрался еще очень долго. Если кому понадобится, привожу пример своего кода:

<script>
<!--
if (document.layers) {
visible='block';
hidden='none';
} else {
if (document.all) {
visible='block';
hidden='none';
}
}
function yadayada(selected) {
if (selected == "something") {
if (document.all) {
selectitem = document.all["selection"].style;
}
if (selectitem.display==hidden) {
selectitem.display=visible;
}
} else {
if (document.all) {
selectitem = document.all["selection"].style;
}
selectitem.display=hidden;
}
}
-->
</script>

В то, что надо динамически отображать вставляете (на примере <tr>) <tr id="selection" style='display:none'>

на select вешаете опцию onChange с содержимым yadayada(document.db_insert.resultat.options[document.db_insert.resultat.selectedIndex].value) , т.е. получаем onChange="yadayada(document.db_insert.resultat.options[document.db_insert.resultat.selectedIndex].value)"
где db_insert имя вашей формы, а resultat - имя select`a. Вот :)
 
Сверху