Неожиданное поведение переключателя по сравнению с if/elseJavascript

Форум по Javascript
Ответить
Anonymous
 Неожиданное поведение переключателя по сравнению с if/else

Сообщение Anonymous »

При изучении JavaScript я столкнулся с чем-то, чего не понимаю; скажем, у меня есть следующий HTML:

Код: Выделить всё

Pick an option
Choice A
Choice B
Choice C
Choice D
Choice E



Я выполняю упражнение, в котором некоторый текст должен появиться в

, в зависимости от выбранного параметра. Он работает со следующим JavaScript (написанным в HTML ):

Код: Выделить всё

function on_change(el){
if (document.getElementById('options').value == 'a') {
document.getElementById('demo').innerHTML = options_summaries.get('a');
} else if (document.getElementById('options').value == 'b') {
document.getElementById('demo').innerHTML = options_summaries.get('b');
} else if (document.getElementById('options').value == 'c') {
document.getElementById('demo').innerHTML = options_summaries.get('c');
} else if (document.getElementById('options').value == 'd') {
document.getElementById('demo').innerHTML = options_summaries.get('d');
} else if (document.getElementById('options').value == 'e') {
document.getElementById('demo').innerHTML = options_summaries.get('e');
}
}
Но это не работает, если делать то же самое с оператором переключателя (который я предпочитаю, потому что он гораздо более читабельен):

Код: Выделить всё

function on_change(el){
switch (document.getElementById('options').value) {
case 'a':
document.getElementById('demo').innerHTML = options_summaries.get('a');
case 'b' :
document.getElementById('demo').innerHTML = options_summaries.get('b');
case 'c':
document.getElementById('demo').innerHTML = options_summaries.get('c');
case 'd':
document.getElementById('demo').innerHTML = options_summaries.get('d');
case 'e':
document.getElementById('demo').innerHTML = options_summaries.get('e');
}
}
С оператором switch текст всегда является одним из последних вариантов последнего случая (здесь 'e'), и, видимо, это особенность (см. здесь), и если я добавляю операторы Break повсюду, это работает, но я не понимаю, почему все случаи анализируются без них, может кто-нибудь объяснить? Есть ли более чистый способ сделать?


Подробнее здесь: https://stackoverflow.com/questions/798 ... to-if-else
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»