Jump to content
  • 0

Можно ли сократить запись switch case?


rus
 Share

Question

Уважаемые комрады!

Можно ли сократить такую запись:

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;
default : onChange=document.getElementById("sel4").style.display = "block";
}

Там где перечисление для: sel2, sel3 style.display = "none"

Можно ли как то перечислить просто sel2, sel3 и т.д... и для них для всех записать style.display = "none"?

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

harrids

Спасибо! Но вот есть одно но, задача несколько сложнее чем на первый взгляд кажется.

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

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.

Edited by rus
Link to comment
Share on other sites

  • 0

Функцию-хелпер написать, что-нить типа:

void doWeirdStuff(index)
{
for (var i=0; i<n; ++i)
{
document.getElementById("sel"+i).style.display = "none";
}
document.getElementById("sel"+index).style.display = "block";
}

И ее вызывать:

switch (val)
{
case 'test': doWeirdStuff(0); break;
case 'bla': doWeirdStuff(1); break;
case 'pre': doWeirdStuff(2); break;
}

И, кстати, вместо

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 'test':
onChange=document.getElementById("sel1").style.display = "block";
onChange=document.getElementById("sel2").style.display = "none";
onChange=document.getElementById("sel3").style.display = "none";
break;

Edited by harrids
Link to comment
Share on other sites

  • 0

harrids

Посмотрел, попробовал использовать - не то.

В твоем примере получается только для одного ключа установить будет ли он block, или none, а тут их очень много.

s0rr0w

А можно пример использования SC?

Я был в созданных тобой разделах, топиках (SC)..., но не понял как к моему случаю его применить?

Попробую поподробней объяснить:

1) Для case 'test' ("sel1") нужен display = "none";

а для case 'test' ("sel2"), ("sel3"), ("sel4") нужен display = "block";, но..., при этом, этих ("sel") может быть ну где-то до 100, но не у всех отображать на дисплее, или блокировать для case 'test'.

2) Этот ключ case 'test' может иметь и другое название и они тоже могут буть разные как в одном селекте, так и одинаковые в другом селекте в ключе value.

Сильно не пинайте за объяснения старался наиболее понятно и доходчиво объяснить. :)

З.Ы. для наглядности могу выложить сюда полный код, но предупреждаю. состоит он из тысячи с копейками строк, в основном из этих switch case, вот я и пытаюсь как то сократить его.

Edited by rus
Link to comment
Share on other sites

  • 0
А можно пример использования SC?

Я был в созданных тобой разделах, топиках (SC)..., но не понял как к моему случаю его применить?

Попробую поподробней объяснить:

Сильно не пинайте за объяснения старался наиболее понятно и доходчиво объяснить. :)

З.Ы. для наглядности могу выложить сюда полный код, но предупреждаю. состоит он из тысячи с копейками строк, в основном из этих switch case, вот я и пытаюсь как то сократить его.

http://forum.htmlbook.ru/index.php?showtopic=12604&st=0

Скачай файлик с примерами, посмотри на третий пример и на седьмой. Они как раз решают задачу (по своему каждый)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy