Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли сократить запись switch case? 
V
    Опции темы
99rus
Дата 25.8.2009, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



Уважаемые комрады!
Можно ли сократить такую запись:
Я не знаю точно (нет, знаю конечно) какой элемент будет скрываться, а какой отображаться и будет это производиться в разных ключах и в каждом из них по разному, например:
Код

switch (val)
{
case 'test': onChange=document.getElementById("sel1").style.display = "block";
case 'test': onChange=document.getElementById("sel2").style.display = "none";
case 'test': onChange=document.getElementById("sel3").style.display = "none";
break;

case 'bla': onChange=document.getElementById("sel2").style.display = "block";
case 'bla': onChange=document.getElementById("sel1").style.display = "none";
case 'bla': onChange=document.getElementById("sel3").style.display = "none";
break;

case 'pre': onChange=document.getElementById("sel3").style.display = "block";
case 'pre': onChange=document.getElementById("sel1").style.display = "none";
case 'pre': onChange=document.getElementById("sel2").style.display = "none";
break;
default : onChange=document.getElementById("sel4").style.display = "block";
}

И таких вот уровней и под уровней довольно много, то есть неизвестное количество...
В этой ситуации можно как-то сократить?
З.Ы. ключи: test, bla и pre приходят из value. 
Я просто немного переделал под свои нужды этот код:
Код

var selects = [];

onload = function() {
 filter(document.getElementById("sel1"), selects);
}

function filter(sel) {
 var val = sel.options[sel.selectedIndex].value;
 if (selects[sel] == undefined) selects[sel] = [];


switch (val)
{
case 'test': onChange=document.getElementById("sel1").style.display = "block";
case 'test': onChange=document.getElementById("sel2").style.display = "none";
case 'test': onChange=document.getElementById("sel3").style.display = "none";
break;

case 'bla': onChange=document.getElementById("sel2").style.display = "block";
case 'bla': onChange=document.getElementById("sel1").style.display = "none";
case 'bla': onChange=document.getElementById("sel3").style.display = "none";
break;

case 'pre': onChange=document.getElementById("sel3").style.display = "block";
case 'pre': onChange=document.getElementById("sel1").style.display = "none";
case 'pre': onChange=document.getElementById("sel2").style.display = "none";
break;
default : onChange=document.getElementById("sel4").style.display = "block";
}


function disable(ids, sel) {
 enabled(sel);
 for (var i=0; i<ids.length; i++) {
  var id = ids[i];
  var seldisbl = document.getElementById(id);
  if (seldisbl != null) {
   var selbool = true;
   for (var ii=0; ii<selects[sel].length; ii++) {
    if (selects[sel][ii] == id) selbool = false;
   }
   if (selbool) selects[sel][selects[sel].length] = id;
   seldisbl.disabled = true;
  }
 }
}

function enabled(sel) {
 for (var i=0; i<selects[sel].length; i++) {
  var selenbl = document.getElementById(selects[sel][i]);
  selenbl.disabled = false;
 }
}

PM MAIL WWW ICQ   Вверх
InvalidProperty
Дата 25.8.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: нет
Всего: 9



да легко:

Код

 onChange=document.getElementById("sel1").style.display = (val == "test" ? "block" : "none"); 
 onChange=document.getElementById("sel2").style.display = (val == "bla" ? "block" : "none"); 
 onChange=document.getElementById("sel3").style.display = (val == "pre" ? "block" : "none");
 onChange=document.getElementById("sel4").style.display = (val == "test" || val == "bla" || val == "pre") ? "none" : "block";


исправлял верхний код. нижний даже не смотрел


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
99rus
Дата 25.8.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



Цитата

да легко:

Код

 onChange=document.getElementById("sel1").style.display = (val == "test" ? "block" : "none"); 
 onChange=document.getElementById("sel2").style.display = (val == "bla" ? "block" : "none"); 
 onChange=document.getElementById("sel3").style.display = (val == "pre" ? "block" : "none");
 onChange=document.getElementById("sel4").style.display = (val == "test" || val == "bla" || val == "pre") ? "none" : "block";


исправлял верхний код. нижний даже не смотрел

А не могли бы прокомментировать что делает ваш код?
Я так понимаю:
onChange=document.getElementById("sel1").style.display = (val == "test" ? "block" : "none");
для ключа "test" с id="sel1" будет значение "block", а для всех остальных "sel..." будет "none", так?
И еще, куда вписывать эту конструкцию? В switch (val) {...}?

Это сообщение отредактировал(а) 99rus - 25.8.2009, 13:31
PM MAIL WWW ICQ   Вверх
InvalidProperty
Дата 25.8.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: нет
Всего: 9



Код

 onChange=document.getElementById("sel1").style.display = (val == "test" ? "block" : "none"); 
 onChange=document.getElementById("sel2").style.display = (val == "bla" ? "block" : "none"); 
 onChange=document.getElementById("sel3").style.display = (val == "pre" ? "block" : "none");
 onChange=document.getElementById("sel4").style.display = (val == "test" || val == "bla" || val == "pre") ? "none" : "block";


первая строчка: sel1 примет значение "block", только если val = "test", в остальных случаях - "none"
вторая строчка: sel2 примет значение "block", только если val = "bla", в остальных случаях - "none"
третья строчка: sel3 примет значение "block", только если val = "pre", в остальных случаях - "none"

четвертая строчка (это свичевый default): se4 примет значение "block", только если val != "test" и "bla" и "pre", иначе - "none"

операция " ? : " - единственная тринарная операция, которая работает не с парой значений, а с тремя, т.о. что если условие, стоящее перед знаком вопроса истинно, то выполняется блок между вопросом и двоеточием, если же условие ложно - блок после двоеточия.

Тебе не нужно использовать switch в данном случае. Твой первый самый код полностью идентичен по результату выполнения моим четырем строчкам без каких-либо дополнений и изменений.

Это сообщение отредактировал(а) InvalidProperty - 25.8.2009, 13:42


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
99rus
Дата 25.8.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



Либо я вас не понимаю, либо вы меня...
Если не сложно будет вам проверить как все это работает в действии, то я выкладываю сюда полный код всего (он ооочень большой):
Код html:
Код

<html>
<head>
<script src="printer.js" type="text/javascript" language="JavaScript"></script>
<link href="spisok.css" rel="stylesheet" type="text/css">

</head>
<body>
<table>
<tr>
<td>


<select id="sel1" onkeyup="filter(this)" onchange="filter(this)" size="1">
<option selected="" value="ТП">Выберите тип принтера</option>
<optgroup label="Принтеры Лазерные Монохромные">
<option class="bold" value="А4 (ЛМ)">Формат А4</option>
<option class="bold" value="А3 (ЛМ)">Формат А3</option>
</optgroup>
<optgroup label="Принтеры Лазерные Цветные">
<option class="bold" value="А4 (ЛЦ)">Формат А4</option>
<option class="bold" value="А3 (ЛЦ)">Формат А3</option>
</optgroup>
<optgroup label="МФУ Лазерные">
<option class="bold" value="МФУ А4 (Л)">Формат А4</option>
<option class="bold" value="МФУ А3 (Л)">Формат А3</option>
</optgroup>
<optgroup label="МФУ Струйные">
<option class="bold" value="МФУ А4 (С)">Формат А4</option>
</optgroup>
</select>


</td>
</tr>

<tr>
<td>


<select id="sel2" onkeyup="filter(this)" onchange="filter(this)" size="1">
<option selected="" value="ПЛМ А4">Выберите Марку принтера</option>
<optgroup label="Принтеры Лазерные Монохромные А4">
<option value="CB410A">HP LaserJet P1005 (CB410A)</option>
<option value="CB412A">HP LaserJet P1505 (CB412A)</option>
<option value="CB413A">HP LaserJet P1505n (CB413A)</option>
<option value="CE457A">HP LaserJet P2055d (CE457A)</option>
<option value="Q7812A">HP LaserJet P3005 (Q7812A)</option>
<option value="Q7813A">HP LaserJet P3005d (Q7813A)</option>
<option value="Q7814A">HP LaserJet P3005n (Q7814A)</option>
<option value="Q7815A">HP LaserJet P3005dn (Q7815A)</option>
<option value="Q7816A">HP LaserJet P3005x (Q7816A)</option>
<option value="CB506A">HP LaserJet P4014 (CB506A)</option>
<option value="CB507A">HP LaserJet P4014n (CB507A)</option>
<option value="CB512A">HP LaserJet P4014dn (CB512A)</option>
<option value="CB509A">HP LaserJet P4015n (CB509A)</option>
<option value="CB510A">HP LaserJet P4015tn (CB510A)</option>
<option value="CB511A">HP LaserJet P4015x (CB511A)</option>
<option value="CB526A">HP LaserJet P4015dn (CB526A)</option>
<option value="CB514A">HP LaserJet P4515n (CB514A)</option>
<option value="CB515A">HP LaserJet P4515tn (CB515A)</option>
<option value="CB517A">HP LaserJet P4515xm (CB517A)</option>
</optgroup>
</select>


<select id="sel3" onkeyup="filter(this)" onchange="filter(this)" size="1">
<option selected="" value="ПЛМ А3">Выберите Марку принтера</option>
<optgroup label="Принтеры Лазерные Монохромные А3">
<option value="Q7543A">HP LaserJet 5200 (Q7543A)</option>
<option value="Q7545A">HP LaserJet 5200tn (Q7545A)</option>
<option value="Q7546A">HP LaserJet 5200dtn (Q7546A)</option>
<option value="Q7699A">HP LaserJet 9040dn (Q7699A)</option>
<option value="Q3722A">HP LaserJet 9050n (Q3722A)</option>
<option value="Q3723A">HP LaserJet 9050dn (Q3723A)</option>
</optgroup>
</select>


<select id="sel4" onkeyup="filter(this)" onchange="filter(this)" size="1">
<option selected="" value="ПЛЦ А4">Выберите Марку принтера</option>
<optgroup label="Принтеры Лазерные Цветные А4">
<option value="CC376A">HP Color LaserJet CP1215 (CC376A)</option>
<option value="CC377A">HP Color LaserJet CP1515n (CC377A)</option>
<option value="CB494A">HP Color LaserJet CP2025n (CB494A)</option>
<option value="CB495A">HP Color LaserJet CP2025dn (CB495A)</option>
<option value="CB442A">HP Color LaserJet CP3505n (CB442A)</option>
<option value="CC470A">HP Color LaserJet CP3525dn (CC470A)</option>
<option value="CC471A">HP Color LaserJet CP3525x(=dtn) (CC471A)</option>
<option value="Q7491A">HP Color LaserJet 4700 (Q7491A)</option>
<option value="Q7492A">HP Color LaserJet 4700n (Q7492A)</option>
<option value="Q7493A">HP Color LaserJet 4700dn (Q7493A)</option>
<option value="Q7494A">HP Color LaserJet 4700dtn (Q7494A)</option>
</optgroup>
</select>


<select id="sel5" onkeyup="filter(this)" onchange="filter(this)" size="1">
<option selected="" value="ПЛЦ А3">Выберите Марку принтера</option>
<optgroup label="Принтеры Лазерные Цветные А3">
<option value="Q3714A">HP Color LaserJet 5550N (Q3714A)</option>
<option value="Q3715A">HP Color LaserJet 5550dn (Q3715A)</option>
<option value="Q3716A">HP Color LaserJet 5550dtn (Q3716A)</option>
<option value="Q3931A">HP Color LaserJet CP6015n (Q3931A)</option>
<option value="Q3932A">HP Color LaserJet CP6015dn (Q3932A)</option>
<option value="Q3934A">HP Color LaserJet CP6015xh (Q3934A)</option>
<option value="C8547A">HP Color LaserJet 9500hdn (C8547A)</option>
</optgroup>
</select>


<select id="sel6" onkeyup="filter(this)" onchange="filter(this)" size="1">
<option selected="" value="МФУЛ А4">Выберите Марку принтера</option>
<optgroup label="МФУ Лазерные А4">
<option value="CC431A">HP LaserJet CM1312nfi (CC431A)</option>
<option value="CB536A">HP LaserJet M1319f (CB536A)</option>
<option value="CB534A">HP LaserJet M1522nf (CB534A)</option>
<option value="CC436A">HP Color LaserJet CM2320nf (CC436A)</option>
<option value="CC435A">HP Color LaserJet CM2320fxi (CC435A)</option>
<option value="CB532A">HP LaserJet M2727nf (CB532A)</option>
<option value="CB533A">HP LaserJet M2727nfs (CB533A)</option>
<option value="CB417A">HP LaserJet M3027x (CB417A)</option>
<option value="CB414A">HP LaserJet M3035 (CB414A)</option>
<option value="CB415A">HP LaserJet M3035xs (CB415A)</option>
<option value="CC519A">HP Color LaserJet CM3530 (CC519A)</option>
<option value="CC520A">HP LaserJet CM3530fs (CC520A)</option>
<option value="CB425A">HP LaserJet M4345 (CB425A)</option>
<option value="CB426A">HP LaserJet M4345x (CB426A)</option>
<option value="CB427A">HP LaserJet M4345xs (CB427A)</option>
<option value="CB428A">HP LaserJet M4345xm (CB428A)</option>
<option value="CB480A">HP Color LaserJet cm4730 (CB480A)</option>
<option value="CB481A">HP Color LaserJet cm4730f (CB481A)</option>
<option value="CB482A">HP Color LaserJet cm4730fsk (CB482A)</option>
<option value="CB483A">HP Color LaserJet cm4730fm (CB483A)</option>
</optgroup>
</select>


<select id="sel7" onkeyup="filter(this)" onchange="filter(this)" size="1">
<option selected="" value="МФУЛ А3">Выберите Марку принтера</option>
<optgroup label="МФУ Лазерные А3">
<option value="Q7829A">HP LaserJet M5035 (Q7829A)</option>
<option value="Q7830A">HP LaserJet M5035x (Q7830A)</option>
<option value="Q7831A">HP LaserJet M5035xs (Q7831A)</option>
<option value="Q3938A">HP Color LaserJet CM6040 (Q3938A)</option>
<option value="CC394A">HP LaserJet M9040 (CC394A)</option>
</optgroup>
</select>


<select id="sel8" onkeyup="filter(this)" onchange="filter(this)" size="1">
<option selected="" value="МФУС А4">Выберите Марку принтера</option>
<optgroup label="МФУ Струйные">
<option value="CB683A">HP Deskjet F2280 (CB683A)</option>
<option value="CC335C">HP Photosmart Premium Fax C309A (CC335C)</option>
<option value="CB071A">HP Officejet J3680 (CB071A)</option>
<option value="CB656C">HP Deskjet F4283 (CB656C)</option>
<option value="Q8388C">HP Photosmart C4483 (Q8388C)</option>
<option value="Q8401C">HP PhotoSmart C4583 (Q8401C)</option>
<option value="CB786A">HP OfficeJet J4660 (CB786A)</option>
<option value="Q8291C">HP PhotoSmart C5383 (Q8291C)</option>
<option value="CB081A">HP OfficeJet J5520 (CB081A)</option>
<option value="CC988C">HP PhotoSmart C6283 (CC988C)</option>
<option value="CD028C">HP PhotoSmart C6383 (CD028C)</option>
<option value="CB057A">HP Officejet Pro 6500 (CB057A)</option>
<option value="CB061A">HP Officejet Pro L7480 (CB061A)</option>
<option value="CB037A">HP Officejet Pro L7580 (CB037A)</option>
<option value="CB038A">HP OfficeJet Pro L7680 (CB038A)</option>
<option value="CB039A">HP OfficeJet Pro L7780 (CB039A)</option>
<option value="CB092A">HP Officejet Pro 8000 (CB092A)</option>
<option value="CB047A">HP Officejet Pro 8000 (CB047A)</option>
<option value="L2526C">HP PhotoSmart C8183 (L2526C)</option>
<option value="CB022A">HP Officejet Pro 8500 (CB022A)</option>
<option value="CB023A">HP Officejet Pro 8500 (CB023A)</option>
</optgroup>
</select>
</td>
</tr>

<tr>
<td>
<!--Начало картриджи для Принтеры Лазерные Монохромные А4-->
<p id="sel10">Картридж1</p>
<p id="sel11">Картридж2</p>
<p id="sel12">Картридж3</p>
<p id="sel13">Картридж4</p>
<p id="sel14">Картридж5</p>
<p id="sel15">Картридж6</p>
<p id="sel16">Картридж7</p>
<p id="sel17">Картридж8</p>
<p id="sel18">Картридж9</p>
<p id="sel19">Картридж10</p>
<p id="sel20">Картридж11</p>
<p id="sel21">Картридж12</p>
<p id="sel22">Картридж13</p>
<p id="sel23">Картридж14</p>
<p id="sel24">Картридж15</p>
<p id="sel25">Картридж16</p>
<p id="sel26">Картридж17</p>
<p id="sel27">Картридж18</p>
<p id="sel28">Картридж19</p>
<!--Конец А4-->
<!--Начало картриджи для Принтеры Лазерные Монохромные А3-->
<p id="sel29">Картридж1</p>
<p id="sel30">Картридж2</p>
<p id="sel31">Картридж3</p>
<p id="sel32">Картридж4</p>
<p id="sel33">Картридж5</p>
<p id="sel34">Картридж6</p>
<!--Конец А3-->
<!--Начало картриджи для Принтеры Лазерные Цветные А4-->
<p id="sel35">Картридж1</p>
<p id="sel36">Картридж2</p>
<p id="sel37">Картридж3</p>
<p id="sel38">Картридж4</p>
<p id="sel39">Картридж5</p>
<p id="sel40">Картридж6</p>
<p id="sel41">Картридж7</p>
<p id="sel42">Картридж8</p>
<p id="sel43">Картридж9</p>
<p id="sel44">Картридж10</p>
<p id="sel45">Картридж11</p>
<!--Конец А4-->
<!--Начало картриджи для Принтеры Лазерные Цветные А3-->
<p id="sel46">Картридж1</p>
<p id="sel47">Картридж2</p>
<p id="sel48">Картридж3</p>
<p id="sel49">Картридж4</p>
<p id="sel50">Картридж5</p>
<p id="sel51">Картридж6</p>
<p id="sel52">Картридж7</p>
<!--Конец А3-->
<DIV class=list id="sel9">
<UL>
<FIELDSET>
<LEGEND>Принтеры</LEGEND>
<LI>
<A href="#">Принтеры лазерные монохромные</A> 
<UL>
<LI>
<TABLE class=printer>
<TBODY>
<TR>
<TD rowSpan=2><IMG src=""> </TD>
<TD colSpan=2>
<P>Выберите принтер, который лучше всего отвечает вашим потребностям - надёжные и производительные монохромные лазерные принтеры HP для больших объемов печати.</P></TD></TR>
</TBODY>
</TABLE>
</LI>
</UL>
</LI>
</FIELDSET>
</UL>
</DIV>


</td>
</tr>
</table>
</body>
</html>

PM MAIL WWW ICQ   Вверх
InvalidProperty
Дата 25.8.2009, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: нет
Всего: 9



и что я должен проверить? вопрос был:
Цитата(99rus @  25.8.2009,  12:23 Найти цитируемый пост)
Можно ли сократить такую запись:

ответ был: можно и был приведен пример. Что непонятно конкретно?



--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
99rus
Дата 25.8.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



Цитата(InvalidProperty @ 25.8.2009,  14:05)
и что я должен проверить? вопрос был:
Цитата(99rus @  25.8.2009,  12:23 Найти цитируемый пост)
Можно ли сократить такую запись:

ответ был: можно и был приведен пример. Что непонятно конкретно?

Непонятно вот что:
case 'test': onChange=document.getElementById("sel1").style.display = "block";
case 'test': onChange=document.getElementById("sel2").style.display = "none";

Для "test" ("sel1") будет блок при вашей записи:
onChange=document.getElementById("sel1").style.display = (val == "test" ? "block" : "none"); 

А для всех остальных "test" ("sel...") будет ноне при такой же записи:
onChange=document.getElementById("sel1").style.display = (val == "test" ? "block" : "none"); 

? Так? Или я что то путаю...
PM MAIL WWW ICQ   Вверх
99rus
Дата 25.8.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



Прикрепляю сам js файл в архиве.
Html разметка выше.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  printer.zip 3,60 Kb
PM MAIL WWW ICQ   Вверх
EmilRegis
Дата 26.8.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: 3
Всего: 4



Вопрос правильно задайте...
конструкция a = (условие)?c:d означает,что a присваивается c при выполнении условия и d при не выполнении условия...
InvalidProperty вам и переписал ваш код как вы просили,то есть гораздо короче...

Цитата(99rus @  25.8.2009,  14:12 Найти цитируемый пост)
Для "test" ("sel1") будет блок при вашей записи:
onChange=document.getElementById("sel1").style.display = (val == "test" ? "block" : "none"); 

А для всех остальных "test" ("sel...") будет ноне при такой же записи:
onChange=document.getElementById("sel1").style.display = (val == "test" ? "block" : "none"); 

? Так? Или я что то путаю... 

именно так
PM MAIL   Вверх
99rus
Дата 26.8.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



InvalidProperty
Спасибо вам огромное за помощь, но ваш пример не совсем так работает как надо, то есть он работает, все гуд, но немного не так...
если смотреть html, то там такая структура:
1) Изначально показан первый select и <DIV class=list id="sel9">
2) Первый select, в нем выбрал option (любой) --> показал второй select под ним. (при этом <DIV class=list id="sel9"> скрыт)
3) Второй select, в нем выбрал option (любой) --> показал контейнер <p> с содержимым, но сам второй select скрывается. (при этом <DIV class=list id="sel9"> скрыт)

В вашем коде получается в принципе все верно, за исключением того что выделено красным в моем описании но сам второй select скрывается, вот он как раз зараза скрывается при выборе во втором selecte любого option, а должен быть виден.
Вот что на выходе получилось:
Код

var selects = [];

onload = function() {
 filter(document.getElementById("sel1"), selects);
}

function filter(sel) {
 var val = sel.options[sel.selectedIndex].value;
 if (selects[sel] == undefined) selects[sel] = [];

 onChange=document.getElementById("sel9").style.display = (val == "ТП" ? "block" : "none"); 
 onChange=document.getElementById("sel2").style.display = (val == "А4 (ЛМ)" ? "block" : "none"); 
 onChange=document.getElementById("sel3").style.display = (val == "А3 (ЛМ)" ? "block" : "none");
 onChange=document.getElementById("sel4").style.display = (val == "А4 (ЛЦ)" ? "block" : "none");
 onChange=document.getElementById("sel5").style.display = (val == "А3 (ЛЦ)" ? "block" : "none");
 onChange=document.getElementById("sel6").style.display = (val == "МФУ А4 (Л)" ? "block" : "none");
 onChange=document.getElementById("sel7").style.display = (val == "МФУ А3 (Л)" ? "block" : "none");
 onChange=document.getElementById("sel8").style.display = (val == "МФУ А4 (С)" ? "block" : "none");
 onChange=document.getElementById("sel10").style.display = (val == "ПЛМ А4" ? "none" : "none");
 onChange=document.getElementById("sel29").style.display = (val == "ПЛМ А3" ? "none" : "none");
 onChange=document.getElementById("sel10").style.display = (val == "CB410A" ? "block" : "none");
 onChange=document.getElementById("sel11").style.display = (val == "CB412A" ? "block" : "none");
 onChange=document.getElementById("sel12").style.display = (val == "CB413A" ? "block" : "none");
 onChange=document.getElementById("sel13").style.display = (val == "CE457A" ? "block" : "none");
 onChange=document.getElementById("sel14").style.display = (val == "Q7812A" ? "block" : "none");
 onChange=document.getElementById("sel15").style.display = (val == "Q7813A" ? "block" : "none");
 onChange=document.getElementById("sel16").style.display = (val == "Q7814A" ? "block" : "none");
 onChange=document.getElementById("sel17").style.display = (val == "Q7815A" ? "block" : "none");
 onChange=document.getElementById("sel18").style.display = (val == "Q7816A" ? "block" : "none");
 onChange=document.getElementById("sel19").style.display = (val == "CB506A" ? "block" : "none");
 onChange=document.getElementById("sel20").style.display = (val == "CB507A" ? "block" : "none");
 onChange=document.getElementById("sel21").style.display = (val == "CB512A" ? "block" : "none");
 onChange=document.getElementById("sel22").style.display = (val == "CB509A" ? "block" : "none");
 onChange=document.getElementById("sel23").style.display = (val == "CB510A" ? "block" : "none");
 onChange=document.getElementById("sel24").style.display = (val == "CB511A" ? "block" : "none");
 onChange=document.getElementById("sel25").style.display = (val == "CB526A" ? "block" : "none");
 onChange=document.getElementById("sel26").style.display = (val == "CB514A" ? "block" : "none");
 onChange=document.getElementById("sel27").style.display = (val == "CB515A" ? "block" : "none");
 onChange=document.getElementById("sel28").style.display = (val == "CB517A" ? "block" : "none");
 onChange=document.getElementById("sel29").style.display = (val == "Q7543A" ? "block" : "none");
 onChange=document.getElementById("sel30").style.display = (val == "Q7545A" ? "block" : "none");
 onChange=document.getElementById("sel31").style.display = (val == "Q7546A" ? "block" : "none");
 onChange=document.getElementById("sel32").style.display = (val == "Q7699A" ? "block" : "none");
 onChange=document.getElementById("sel33").style.display = (val == "Q3722A" ? "block" : "none");
 onChange=document.getElementById("sel34").style.display = (val == "Q3723A" ? "block" : "none");
 onChange=document.getElementById("sel35").style.display = (val == "ПЛЦ А4" ? "none" : "none");
 onChange=document.getElementById("sel46").style.display = (val == "ПЛЦ А3" ? "none" : "none");
 onChange=document.getElementById("sel35").style.display = (val == "CC376A" ? "block" : "none");
 onChange=document.getElementById("sel36").style.display = (val == "CC377A" ? "block" : "none");
 onChange=document.getElementById("sel37").style.display = (val == "CB494A" ? "block" : "none");
 onChange=document.getElementById("sel38").style.display = (val == "CB495A" ? "block" : "none");
 onChange=document.getElementById("sel39").style.display = (val == "CB442A" ? "block" : "none");
 onChange=document.getElementById("sel40").style.display = (val == "CC470A" ? "block" : "none");
 onChange=document.getElementById("sel41").style.display = (val == "CC471A" ? "block" : "none");
 onChange=document.getElementById("sel42").style.display = (val == "Q7491A" ? "block" : "none");
 onChange=document.getElementById("sel43").style.display = (val == "Q7492A" ? "block" : "none");
 onChange=document.getElementById("sel44").style.display = (val == "Q7493A" ? "block" : "none");
 onChange=document.getElementById("sel45").style.display = (val == "Q7494A" ? "block" : "none");
 onChange=document.getElementById("sel46").style.display = (val == "Q3714A" ? "block" : "none");
 onChange=document.getElementById("sel47").style.display = (val == "Q3715A" ? "block" : "none");
 onChange=document.getElementById("sel48").style.display = (val == "Q3716A" ? "block" : "none");
 onChange=document.getElementById("sel49").style.display = (val == "Q3931A" ? "block" : "none");
 onChange=document.getElementById("sel50").style.display = (val == "Q3932A" ? "block" : "none");
 onChange=document.getElementById("sel51").style.display = (val == "Q3934A" ? "block" : "none");
 onChange=document.getElementById("sel52").style.display = (val == "C8547A" ? "block" : "none");
 onChange=document.getElementById("sel1").style.display = (val == "") ? "none" : "block";
}

function disable(ids, sel) {
 enabled(sel);
 for (var i=0; i<ids.length; i++) {
  var id = ids[i];
  var seldisbl = document.getElementById(id);
  if (seldisbl != null) {
   var selbool = true;
   for (var ii=0; ii<selects[sel].length; ii++) {
    if (selects[sel][ii] == id) selbool = false;
   }
   if (selbool) selects[sel][selects[sel].length] = id;
   seldisbl.disabled = true;
  }
 }
}

function enabled(sel) {
 for (var i=0; i<selects[sel].length; i++) {
  var selenbl = document.getElementById(selects[sel][i]);
  selenbl.disabled = false;
 }
}


Это сообщение отредактировал(а) 99rus - 26.8.2009, 09:53
PM MAIL WWW ICQ   Вверх
InvalidProperty
Дата 26.8.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: нет
Всего: 9



это не мой пример работает не совсем так, как нужно. Я показал, как можно сократить запись, я не брался в твой пример жизнь вдыхать. Еще раз внимательно прочитай то, что сам же в своем коде написал:

Код

<select id="sel1" onkeyup="filter(this)" onchange="filter(this)" size="1">
...
function filter(sel) {
...
 onChange=document.getElementById("sel2").style.display = (val == "А4 (ЛМ)" ? "block" : "none"); 


этот код будет обработан нормально. Следующий код будет обработан тоже нормально, но тебе это не нравится:

Код

<select id="sel2" onkeyup="filter(this)" onchange="filter(this)" size="1">
...
function filter(sel) {
...
 onChange=document.getElementById("sel2").style.display = (val == "А4 (ЛМ)" ? "block" : "none"); 


еще не догадываешься в чем у тебя ошибка? ты вызываешь функцию filter с аргументом this. В самой функцие val принимает значение объекта аргумента. Т.о. в первом случае ты берешь значение первого селекта, а во втором - второго, хотя второй селект у тебя в жизни никогда не примет значение "А4 (ЛМ)".

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

onChange=document.getElementById("sel2").style.display = 
     (document.getElementById("sel1").options[document.getElementById("sel1").selectedIndex].value == "А4 (ЛМ)" ? "block" : "none"); 


этот код сокращай сам smile. В остальных местах, скорее всего, тебе тоже придется кое-что исправить

Это сообщение отредактировал(а) InvalidProperty - 26.8.2009, 10:49


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
99rus
Дата 26.8.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



Спасибо дружище, за понимание и проявленное терпение, буду думать дальше! smile 
PM MAIL WWW ICQ   Вверх
diadiavova
Дата 26.8.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



99rus, посмотрел код. Там в принципе всё сделано неправильно. Я переработал пример, он правда при выборе принтера выводит на экран значение атрибута value выбранного принтера, но это уже сам переделаешь как надо smile 
Код

<html>
<head>
    <title>Выбор принтера</title>
</head>
<body>
    <p>
        <select id="printerType" onchange="return printerType_onchange()">
            <optgroup label="Принтеры Лазерные Монохромные">
                <option class="bold" value="lma4">Формат А4</option>
                <option class="bold" value="lma3">Формат А3</option>
            </optgroup>
            <optgroup label="Принтеры Лазерные Цветные">
                <option class="bold" value="lca4">Формат А4</option>
                <option class="bold" value="lca3">Формат А3</option>
            </optgroup>
            <optgroup label="МФУ Лазерные">
                <option class="bold" value="mfua4">Формат А4</option>
                <option class="bold" value="mfua3">Формат А3</option>
            </optgroup>
            <optgroup label="МФУ Струйные">
                <option class="bold" value="mfua4s">Формат А4</option>
            </optgroup>
        </select>
        <select id="printers" onchange="return printers_onchange()">
            <option selected="true">Выберите Марку принтера</option>
            <optgroup label="Принтеры Лазерные Монохромные А4" id="lma4">
                <option value="CB410A">HP LaserJet P1005 (CB410A)</option>
                <option value="CB412A">HP LaserJet P1505 (CB412A)</option>
                <option value="CB413A">HP LaserJet P1505n (CB413A)</option>
                <option value="CE457A">HP LaserJet P2055d (CE457A)</option>
                <option value="Q7812A">HP LaserJet P3005 (Q7812A)</option>
                <option value="Q7813A">HP LaserJet P3005d (Q7813A)</option>
                <option value="Q7814A">HP LaserJet P3005n (Q7814A)</option>
                <option value="Q7815A">HP LaserJet P3005dn (Q7815A)</option>
                <option value="Q7816A">HP LaserJet P3005x (Q7816A)</option>
                <option value="CB506A">HP LaserJet P4014 (CB506A)</option>
                <option value="CB507A">HP LaserJet P4014n (CB507A)</option>
                <option value="CB512A">HP LaserJet P4014dn (CB512A)</option>
                <option value="CB509A">HP LaserJet P4015n (CB509A)</option>
                <option value="CB510A">HP LaserJet P4015tn (CB510A)</option>
                <option value="CB511A">HP LaserJet P4015x (CB511A)</option>
                <option value="CB526A">HP LaserJet P4015dn (CB526A)</option>
                <option value="CB514A">HP LaserJet P4515n (CB514A)</option>
                <option value="CB515A">HP LaserJet P4515tn (CB515A)</option>
                <option value="CB517A">HP LaserJet P4515xm (CB517A)</option>
            </optgroup>
            <optgroup label="Принтеры Лазерные Монохромные А3" id="lma3">
                <option value="Q7543A">HP LaserJet 5200 (Q7543A)</option>
                <option value="Q7545A">HP LaserJet 5200tn (Q7545A)</option>
                <option value="Q7546A">HP LaserJet 5200dtn (Q7546A)</option>
                <option value="Q7699A">HP LaserJet 9040dn (Q7699A)</option>
                <option value="Q3722A">HP LaserJet 9050n (Q3722A)</option>
                <option value="Q3723A">HP LaserJet 9050dn (Q3723A)</option>
            </optgroup>
            <optgroup label="Принтеры Лазерные Цветные А4" id="lca4">
                <option value="CC376A">HP Color LaserJet CP1215 (CC376A)</option>
                <option value="CC377A">HP Color LaserJet CP1515n (CC377A)</option>
                <option value="CB494A">HP Color LaserJet CP2025n (CB494A)</option>
                <option value="CB495A">HP Color LaserJet CP2025dn (CB495A)</option>
                <option value="CB442A">HP Color LaserJet CP3505n (CB442A)</option>
                <option value="CC470A">HP Color LaserJet CP3525dn (CC470A)</option>
                <option value="CC471A">HP Color LaserJet CP3525x(=dtn) (CC471A)</option>
                <option value="Q7491A">HP Color LaserJet 4700 (Q7491A)</option>
                <option value="Q7492A">HP Color LaserJet 4700n (Q7492A)</option>
                <option value="Q7493A">HP Color LaserJet 4700dn (Q7493A)</option>
                <option value="Q7494A">HP Color LaserJet 4700dtn (Q7494A)</option>
            </optgroup>
            <optgroup label="Принтеры Лазерные Цветные А3" id="lca3">
                <option value="Q3714A">HP Color LaserJet 5550N (Q3714A)</option>
                <option value="Q3715A">HP Color LaserJet 5550dn (Q3715A)</option>
                <option value="Q3716A">HP Color LaserJet 5550dtn (Q3716A)</option>
                <option value="Q3931A">HP Color LaserJet CP6015n (Q3931A)</option>
                <option value="Q3932A">HP Color LaserJet CP6015dn (Q3932A)</option>
                <option value="Q3934A">HP Color LaserJet CP6015xh (Q3934A)</option>
                <option value="C8547A">HP Color LaserJet 9500hdn (C8547A)</option>
            </optgroup>
            <optgroup label="МФУ Лазерные А4" id="mfua4">
                <option value="CC431A">HP LaserJet CM1312nfi (CC431A)</option>
                <option value="CB536A">HP LaserJet M1319f (CB536A)</option>
                <option value="CB534A">HP LaserJet M1522nf (CB534A)</option>
                <option value="CC436A">HP Color LaserJet CM2320nf (CC436A)</option>
                <option value="CC435A">HP Color LaserJet CM2320fxi (CC435A)</option>
                <option value="CB532A">HP LaserJet M2727nf (CB532A)</option>
                <option value="CB533A">HP LaserJet M2727nfs (CB533A)</option>
                <option value="CB417A">HP LaserJet M3027x (CB417A)</option>
                <option value="CB414A">HP LaserJet M3035 (CB414A)</option>
                <option value="CB415A">HP LaserJet M3035xs (CB415A)</option>
                <option value="CC519A">HP Color LaserJet CM3530 (CC519A)</option>
                <option value="CC520A">HP LaserJet CM3530fs (CC520A)</option>
                <option value="CB425A">HP LaserJet M4345 (CB425A)</option>
                <option value="CB426A">HP LaserJet M4345x (CB426A)</option>
                <option value="CB427A">HP LaserJet M4345xs (CB427A)</option>
                <option value="CB428A">HP LaserJet M4345xm (CB428A)</option>
                <option value="CB480A">HP Color LaserJet cm4730 (CB480A)</option>
                <option value="CB481A">HP Color LaserJet cm4730f (CB481A)</option>
                <option value="CB482A">HP Color LaserJet cm4730fsk (CB482A)</option>
                <option value="CB483A">HP Color LaserJet cm4730fm (CB483A)</option>
            </optgroup>
            <optgroup label="МФУ Лазерные А3" id="mfua3">
                <option value="Q7829A">HP LaserJet M5035 (Q7829A)</option>
                <option value="Q7830A">HP LaserJet M5035x (Q7830A)</option>
                <option value="Q7831A">HP LaserJet M5035xs (Q7831A)</option>
                <option value="Q3938A">HP Color LaserJet CM6040 (Q3938A)</option>
                <option value="CC394A">HP LaserJet M9040 (CC394A)</option>
            </optgroup>
            <optgroup label="МФУ Струйные" id="mfua4s">
                <option value="CB683A">HP Deskjet F2280 (CB683A)</option>
                <option value="CC335C">HP Photosmart Premium Fax C309A (CC335C)</option>
                <option value="CB071A">HP Officejet J3680 (CB071A)</option>
                <option value="CB656C">HP Deskjet F4283 (CB656C)</option>
                <option value="Q8388C">HP Photosmart C4483 (Q8388C)</option>
                <option value="Q8401C">HP PhotoSmart C4583 (Q8401C)</option>
                <option value="CB786A">HP OfficeJet J4660 (CB786A)</option>
                <option value="Q8291C">HP PhotoSmart C5383 (Q8291C)</option>
                <option value="CB081A">HP OfficeJet J5520 (CB081A)</option>
                <option value="CC988C">HP PhotoSmart C6283 (CC988C)</option>
                <option value="CD028C">HP PhotoSmart C6383 (CD028C)</option>
                <option value="CB057A">HP Officejet Pro 6500 (CB057A)</option>
                <option value="CB061A">HP Officejet Pro L7480 (CB061A)</option>
                <option value="CB037A">HP Officejet Pro L7580 (CB037A)</option>
                <option value="CB038A">HP OfficeJet Pro L7680 (CB038A)</option>
                <option value="CB039A">HP OfficeJet Pro L7780 (CB039A)</option>
                <option value="CB092A">HP Officejet Pro 8000 (CB092A)</option>
                <option value="CB047A">HP Officejet Pro 8000 (CB047A)</option>
                <option value="L2526C">HP PhotoSmart C8183 (L2526C)</option>
                <option value="CB022A">HP Officejet Pro 8500 (CB022A)</option>
                <option value="CB023A">HP Officejet Pro 8500 (CB023A)</option>
            </optgroup>
        </select>
    </p>
    <div id="d1">
    </div>

    <script type="text/javascript">


        function printerType_onchange()
        {
            var prT = document.getElementById("printerType");
            var prs = document.getElementById("printers");
            prs.selectedIndex = 0;
            var count = prs.childNodes.length;
            for (var i = 0; i < prs.childNodes.length; i++)
            {
            var cur=prs.childNodes.item(i);
            if (cur.nodeName.toLowerCase() == "optgroup")
            {
                cur.style.display = cur.id == prT.value.toLowerCase() ? "block" : "none";
            }
            }            
        }

        function printers_onchange()
        {
            var prs = document.getElementById("printers");
            print(prs.value);
        }
        function print(text)
        {
            var res = document.getElementById("d1");
            res.innerHTML = text;
        }

    </script>

</body>
</html>



Это код вместе со скриптом smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
99rus
Дата 26.8.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



diadiavova
Спасибо за труд и уделенное внимание, но этот пример к данной задаче не подходит.
Задача заключалась в следующе:
1) Изначально показывается один селект с типами и форматами принтеров (Лазерные монохромные формата А4 "ЛМ А4" к примеру и т.д...)
и еще внизу показывается блок с картинкой и текстом (постоянный контент, типа рекламы), при клике на ссылку в этом блоке, он еще раскрывается, т.е. показывается доп. инфа.
2) При выборе типа принтера "ЛМ А4", под этим селектом показывается еще доп. селект со списком марок принтеров "HP LaserJet P1005 (CB410A)".
3) При выборе марки принтера "HP LaserJet P1005 (CB410A)", под этим селектом показывается блок с картриджем который к нему подходит, при этом все селекты вверху остаются без изменений, что бы человек видел что он выбрал (это как обратная навигация навигация "хлебные крошки", пользователь видит где он находится и откуда пришел.).
Да, при выборе пункта 2) и 3) "селекты", блок с дополнительной инфой "типа реклама" не должен отображаться.
З.Ы. так что как видите не так уж все просто.
PM MAIL WWW ICQ   Вверх
InvalidProperty
Дата 26.8.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: нет
Всего: 9



99rus, есть в словах diadiavova стоящая мысль, не отвергай ее.

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


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.