#javascript
#javascript #оператор переключения #if-оператор
Вопрос:
У меня есть следующий код, который в зависимости от параметра url изменяется, а затем скрывает опцию выбора в форме. ie www.example.com?type=images
В конечном итоге будет более 20 различных параметров. Я хотел бы знать о лучшем способе, чем иметь огромное количество if else. Просто набросок того, как это сделать, в порядке, я новичок в этом, поэтому я хотел бы иметь возможность принять ответ и извлечь из него уроки. Спасибо.
var type = getURLparameter('type'); //from another function
if (type == "images"){
var selectDiv =('divid');
var selectField = ('selectid');
document.getElementById(selectField).options[1].selected=true;
document.getElementById(selectDiv).style.visibility="hidden";
}
else if (type == "pizza") {
var selectDiv =('divid');
var selectField = ('selectid');
document.getElementById(selectField).options[2].selected=true;
document.getElementById(selectDiv).style.visibility="hidden";
}
else (type == "cheese") {
var selectDiv =('divid');
var selectField = ('selectid');
document.getElementById(selectField).options[3].selected=true;
document.getElementById(selectDiv).style.visibility="hidden";
}
Комментарии:
1. Как насчет switch ?
2. Я бы отформатировал ваш HTML и тому подобное, чтобы вам не требовались особые случаи для всего.
3. Я должен согласиться с комментарием Blender. Если ваша структура выполнена хорошо, вам не нужны if-elses или оператор switch .
4. Мне кажется, что в приведенном примере кода единственное, что меняется в каждом случае, — это индекс в
.options
коллекции, поэтому используете ли вы переключатель или сохраняете структуру if / else if / else if строка для выбора подходящей опции — это единственное, что вам нужно в каждом случае — остальные тристроки могут быть перемещены до первого if (или до переключателя, если вы, ну … переключитесь на это).5. Как бы я это сделал? Это всего лишь одно поле выбора.
Ответ №1:
Чтобы не повторять код, я бы написал ваш код следующим образом с таблицей поиска для номера индекса и без повторного кода для каждого параметра:
var typeNum = {
images: 1,
pizza: 2,
cheese: 3
};
var type = getURLparameter('type');
if (type in typeNum) {
document.getElementById('selectid').options[typeNum[type]].selected = true;
document.getElementById('divid').style.visibility = "hidden";
}
Комментарии:
1. Я почти уверен, что это то, что я ищу. Спасибо!
Ответ №2:
Используйте переключатель:
var selectDiv = document.getElementById('divid'),
selectField = document.getElementById('selectid');
switch(type){
case "images":
selectField.options[1].selected=true;
selectDiv.style.visibility="hidden";
break;
case "pizza":
selectField.options[2].selected=true;
selectDiv.style.visibility="hidden";
break;
case "cheese":
selectField.options[3].selected=true;
selectDiv.style.visibility="hidden";
break;
}
Комментарии:
1. Здесь повторяется код, который может быть удален из оператора switch .
2. Отрицательный голос был не мной. Я действительно думаю, что отрицательные голоса должны потребовать некоторого объяснения.
Ответ №3:
Поместите их в объект и найдите тот, который вам нужен.
var type_table = {
images: {
div_id: 'somevalue',
select_id: 'somevalue',
option_index: 0
},
pizza: {
div_id: 'somevalue',
select_id: 'somevalue',
option_index: 1
},
cheese: {
div_id: 'somevalue',
select_id: 'somevalue',
option_index: 2
}
};
затем…
var the_type = type_table[ type ];
document.getElementById(the_type.select_id).options[the_type.option_index].selected=true;
document.getElementById(the_type.div_id).style.visibility="hidden";
Если идентификаторы на самом деле все одинаковые, то, естественно, вы должны кэшировать эти элементы вместо их повторного выбора, и единственное, что вам нужно будет сохранить в таблице, это номер индекса.
Похоже, что единственной уникальной частью является индекс. Если да, сделайте это:
var type_table = {
images:0,
pizza:1,
cheese:2, // and so on
};
var the_div = document.getElementById('div_id');
var the_select = document.getElementById('select_id');
затем внутри функции, которая выполняет код…
the_select.options[ type_table[ type ] ].selected=true;
the_div.style.visibility="hidden";
Комментарии:
1. Также использовались некоторые из этих решений. Если бы у меня было еще немного репутации. Я бы точно проголосовал. Спасибо за вашу помощь.
Ответ №4:
может switch
быть, заявление поможет вам
http://www.tutorialspoint.com/javascript/javascript_switch_case.htm
кроме того, установите selectDiv
перед всем, чтобы уменьшить объем кода 🙂
switch(type) {
case 'images':
//blah
break;
}
Комментарии:
1. @PHPBree: Вы могли бы предложить приличную ссылку или две , чтобы tekknolagi знал, где лучше искать в будущем.
2. @muistoosh это правда, но я только что погуглил
javascript switch statement
, и W3Schools — первое, что появилось … я думаю, это то, что я получаю за лень. Опять же, я ответил первым! и страница w3schools была правильной!3. Это часть проблемы с w3fools: они использовали систему, чтобы попасть на вершину рейтинга Google, чтобы люди невольно находили их и предполагали, что они связаны с реальным W3. Добавьте MDN в закладки и es5.github.com ссылки и перейти прямо туда в будущем; любой поиск в HTML или CSS в Google должен включать «site:w3.org » чтобы получить настоящую вещь.
4. @muistoosh черт! не знал этого о w3fools, и это отличные ресурсы!
Ответ №5:
document.getElementById(selectField).options[(type == "images" ? 1 : (type == "pizza" ? 2 : 3))].selected=true;
document.getElementById(selectDiv).style.visibility="hidden";
Ответ №6:
вы могли бы использовать массив функций, аналогичный популярному словарному решению на c#,
var mySwitch={};
mySwitch['images'] = function(){
var selectDiv =('divid');
var selectField = ('selectid');
document.getElementById(selectField).options[1].selected=true;
document.getElementById(selectDiv).style.visibility="hidden";
};
mySwitch['pizza'] = function(){...};
затем выполните
mySwitch[type]();
Ответ №7:
Я знаю, что это очень старый вопрос, но хотел предложить альтернативное решение, мне нравится этот подход, потому что он лаконичный, но при этом очень легко читаемый
const type = getURLparameter('type'); //from another function
const images = type === 'images' amp;amp; 1
const pizza = type === 'pizza' amp;amp; 2
const cheese = type === 'cheese' amp;amp; 3
const option = images || pizza || cheese
document.getElementById(selectField).options[option].selected=true;