Рассмотрим задачу на практическое применение выпадающих списков select. Пусть у нас есть селект со странами и селект с городами. Давайте сделаем так, чтобы при выборе определенный страны во втором селекте появлялись города этой страны. Найдем самое универсальное решение!
Исходники кода
.cities {
display: none;
}
.active.cities {
display: inline-block;
}
<select id="countries">
<option value="ru">Россия</option>
<option value="by">Беларусь</option>
<option value="ua">Украина</option>
</select>
<select id="ru" class="cities active">
<option>Москва</option>
<option>Питер</option>
<option>Воронеж</option>
</select>
<select id="by" class="cities">
<option>Минск</option>
<option>Витебск</option>
<option>Орша</option>
</select>
<select id="ua" class="cities">
<option>Киев</option>
<option>Львов</option>
<option>Одесса</option>
</select>
var countries = document.querySelector('#countries');
var ruCities = document.querySelector('#ru');
var byCities = document.querySelector('#by');
var uaCities = document.querySelector('#ua');
countries.addEventListener('change', function() {
document.querySelector('.active.cities').classList.remove('active');
if(this.value == 'ru') {
ruCities.classList.add('active');
}
if(this.value == 'by') {
byCities.classList.add('active');
}
if(this.value == 'ua') {
uaCities.classList.add('active');
}
});
<select id="countries-select"></select>
<select id="cities-select"></select>
var countriesSelect = document.querySelector('#countries-select');
var citiesSelect = document.querySelector('#cities-select');
var data = {
Россия: ['Москва', 'Питер', 'Воронеж'],
Беларусь: ['Минск', 'Витебск', 'Орша'],
Украина: ['Киев', 'Львов', 'Одесса'],
}
var countries = Object.keys(data);
for (var i = 0; i < countries.length; i++) {
countriesSelect.add(new Option(countries[i]));
}
var defaultCities = data[countries[0]];
for (var i = 0; i < defaultCities.length; i++) {
citiesSelect.add(new Option(defaultCities[i]));
}
countriesSelect.addEventListener('change', function() {
var cities = data[this.value];
citiesSelect.length = 0;
for (var i = 0; i < cities.length; i++) {
citiesSelect.add(new Option(cities[i]));
}
});
<select id="countries-select"></select>
<select id="cities-select"></select>
var countriesSelect = document.querySelector('#countries-select');
var citiesSelect = document.querySelector('#cities-select');
var data = {
Россия: ['Москва', 'Питер', 'Воронеж'],
Беларусь: ['Минск', 'Витебск', 'Орша'],
Украина: ['Киев', 'Львов', 'Одесса'],
}
var countries = Object.keys(data);
addOptions(countriesSelect, countries);
var defaultCities = data[countries[0]];
addOptions(citiesSelect, defaultCities);
countriesSelect.addEventListener('change', function() {
var cities = data[this.value];
citiesSelect.length = 0;
addOptions(citiesSelect, cities);
});
function addOptions(select, arr) {
for (var i = 0; i < arr.length; i++) {
select.add(new Option(arr[i]));
}
}