Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.11.2016, 18:02
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Взаимосвязь select'ов
Доброго времени суток, помогите реализовать следующую функцию:
Есть 2 select
у первого к примеру 5 значений для выбора
второй изначально скрыт и пуст
Как только выберем из первого какое то значение, должен отобразится второй и в него должны загрузиться данные (например из массива) которые предназначены именно для выбранной опции.
По Русски это звучит так:
Выбираем допустим в первом select'е третье значение по имени "автобусы" и второй сразу становится видим и в него загружаются все "автобусы", если в первом выберем легковые, то во второй загрузятся "легковухи" и т.д.
Ответить с цитированием
  #2 (permalink)  
Старый 10.11.2016, 13:47
Аватар для Опан
Кандидат Javascript-наук
Отправить личное сообщение для Опан Посмотреть профиль Найти все сообщения от Опан
 
Регистрация: 15.03.2013
Сообщений: 100

Есть пример для трёх селектов:
Страна: <select id="country_id" class="StyleSelectBox">
    <option value="0">- выберите страну -</option>
    <option value="1">Россия</option>
    <option value="2">Украина</option>
    <option value="3">Белорусь</option>
</select>
<br>Регион: 
<select id="region_id" disabled>
    <option value="0">- Выберите регион -</option>
</select></td><td>
<br>Город: 
<select id="city_id" disabled>
    <option value="0">- Выберите город -</option>
</select>

<script>
var all_regions=[];
var all_cites=[[],[],[]];
 
all_regions[0]=["московская обл","ростовская обл","саратовская обл"];
all_regions[1]=["киевская обл","львовская обл","харьковская обл"];
all_regions[2]=["минская обл","брестская обл","гроднинская обл"];
 
all_cites[0][0]=["Москва","Химки","Калуга"];
all_cites[0][1]=["Такой-то город","Такой-то город","Калуга"];
all_cites[0][2]=["Такой-то город","Такой-то город","Такой-то город"];
 
all_cites[1][0]=["Киев","Жмеринка","Бердычев"];
all_cites[1][1]=["Львов","Сокаль","Стрый"];
all_cites[1][2]=["Харьков","Полтава","Пирятин"];
 
all_cites[2][0]=["Минск","Такой-то город","Такой-то город"];
all_cites[2][1]=["Брест","Такой-то город","Такой-то город"];
all_cites[2][2]=["Гродно","Такой-то город","Вильно"];
 
country_id.onchange=function(){
    region_id.disabled=false;
    region_id.innerHTML="<option value='0'>- Выберите регион -</option>";
    myregion=this.value-1;
    if(myregion!=-1){
        for(var i=0;i<all_regions[myregion].length;i++){
            region_id.innerHTML+='<option value="'+(i+1)+'">'+all_regions[myregion][i]+'</option>';
        }
    }else{
        region_id.disabled=true;
        city_id.disabled=true;
    }
}
 
region_id.onchange=function(){
    city_id.disabled=false;
    city_id.innerHTML="<option value='0'>- Выберите город -</option>";
    var mycite=this.value-1;
    if(mycite!=-1){
        for(var i=0;i<all_cites[myregion][mycite].length;i++){
            city_id.innerHTML+='<option value="'+(i+1)+'">'+all_cites[myregion][mycite][i]+'</option>';
        }
    }else{
        city_id.disabled=true;
    }
}
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 15.09.2018, 14:15
Новичок на форуме
Отправить личное сообщение для september-x Посмотреть профиль Найти все сообщения от september-x
 
Регистрация: 26.08.2011
Сообщений: 5

Опан,
Подскажите, пожалуйста, как изменить код чтобы в value вместо цифер указывать "Россия / Украина / Белорусь"?
Ответить с цитированием
  #4 (permalink)  
Старый 15.09.2018, 14:24
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

september-x,
в value города в html что у вас?
Ответить с цитированием
  #5 (permalink)  
Старый 15.09.2018, 15:45
Новичок на форуме
Отправить личное сообщение для september-x Посмотреть профиль Найти все сообщения от september-x
 
Регистрация: 26.08.2011
Сообщений: 5

В программировании я еще туп, пока пытался просто переделать готовый вариант с выводом значения из селектов (в данном случае у меня выдает число вместо материала), да только тут в числовом value вся суть и условие задано для чисел..

<tr>
<td><select id="kzas_Har" class="StyleSelectBox">
    <option value="0">---</option>
    <option value="Кирпичи">Кирпичи</option>
    <option value="Бутылки">Бутылки</option></select></td>
<td><div id="wb_Text7"><span>Материал</span></div></td>
</tr>


<tr>
<td><select id="kzas_KolZd" ><option value="">---</option></select></td>
<td><div id="wb_Text7"><span>Количество</span></div></td></tr>
<tr>
<td><select id="kzas_PlotZas" ><option value="">---</option></select></td>
<td><div id="wb_Text7"><span>Плотность</span></div></td></tr>

<script>
var all_regions=[];
var all_cites=[[],[]];
 
all_regions[0]=[2,5,9];
all_regions[1]=["1-2","4-6"];
 
all_cites[0][0]=[10,20,30,50];
all_cites[0][1]=[10,20,30,40];
 

kzas_Har.onchange=function(){
    kzas_KolZd.disabled=false;
    kzas_KolZd.innerHTML="<option value='0'>---</option>";
    myregion=this.value-1;
    if(myregion!=-1){
        for(var i=0;i<all_regions[myregion].length;i++){
            kzas_KolZd.innerHTML+='<option value="'+(i+1)+'">'+all_regions[myregion][i]+'</option>';
        }
    }else{
        kzas_KolZd.disabled=true;
        kzas_PlotZas.disabled=true;
    }
}
 
kzas_KolZd.onchange=function(){
    kzas_PlotZas.disabled=false;
    kzas_PlotZas.innerHTML="<option value='0'>---</option>";
    var mycite=this.value-1;
    if(mycite!=-1){
        for(var i=0;i<all_cites[myregion][mycite].length;i++){
            kzas_PlotZas.innerHTML+='<option value="'+(i+1)+'">'+all_cites[myregion][mycite][i]+'</option>';
        }
    }else{
        kzas_PlotZas.disabled=true;
    }
}
</script>
Ответить с цитированием
  #6 (permalink)  
Старый 15.09.2018, 15:53
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

опишите подробно что должно происходить.
Ответить с цитированием
  #7 (permalink)  
Старый 15.09.2018, 16:05
Новичок на форуме
Отправить личное сообщение для september-x Посмотреть профиль Найти все сообщения от september-x
 
Регистрация: 26.08.2011
Сообщений: 5

У меня есть первый селект, задающий условие (Кирпичи или Бутылки)
В зависимости от его условия у двух других меняются значения. С последующим выводом результата (переменная или .. ) для дальнейшего использования в формулах
*блокировка не интересует

К примеру:
Если первый селект "Кирпичи"
Второй селект id="kzas_KolZd" - значения [2,5,9];
Третий селект id="kzas_KolZd" - значения ["1-2","4-6"]
Если первый селект "Бутылки"
Второй селект id="kzas_PlotZas" - значения [10,20,30,50];
Третий селект id="kzas_PlotZas" - значения [10,20,30,40]

У меня есть идея задать value (при выводе результата у меня выводится имя value):
<option value="Кирпичи">Кирпичи</option>
<option value="Бутылки">Бутылки</option>
и в условии просто прописать если "Кирпичи", то 2 или 5 или 9 и т.д. (но я пока не знаю как задать условие для массива (сделать выбор между ними).. для одного условия я справлюсь)..
Ответить с цитированием
  #8 (permalink)  
Старый 15.09.2018, 16:23
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

id одинаковые не должны быть
Ответить с цитированием
  #9 (permalink)  
Старый 15.09.2018, 16:41
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
<select id="first">
		<option>-------</option>
		<option>Кирпичи</option>
		<option>Бутылки</option>
	</select>
	<div id="sel"></div>

	<script>

		first.onchange = function(){
			if(this.selectedIndex == 0) sel.innerHTML = '';
			if(this.selectedIndex == 1) //Кирпичи
			sel.innerHTML = '\
			<select>\
			<option>2</option>\
			<option>5</option>\
			<option>9</option>\
			</select><br>\
			<select>\
			<option>1-2</option>\
			<option>4-6</option>\
			</select>';
			else if(this.selectedIndex == 2)  //бутылки
			sel.innerHTML = '\
			<select>\
			<option>10</option>\
			<option>20</option>\
			<option>30</option>\
			<option>50</option>\
			</select><br>\
			<select>\
			<option>10</option>\
			<option>20</option>\
			<option>30</option>\
			<option>40</option>\
			</select>';
		};
	</script>

</body>
</html>

если нужны value можете добавить, id тоже, обработчик вешайте внутри или делегируйте

Последний раз редактировалось j0hnik, 15.09.2018 в 17:29.
Ответить с цитированием
  #10 (permalink)  
Старый 15.09.2018, 17:25
Новичок на форуме
Отправить личное сообщение для september-x Посмотреть профиль Найти все сообщения от september-x
 
Регистрация: 26.08.2011
Сообщений: 5

Большое спасибо за помощь!! По превью все работает, буду изучать почему у меня ругается на "`"..
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взаимосвязь input и select maxg5 jQuery 3 04.11.2016 11:42
выбор value мз select'ов new_guy Элементы интерфейса 6 02.10.2014 15:10
Взаимосвязь между страницами Алек jQuery 2 04.08.2013 17:59
Взаимосвязь с видео Дмитриий Events/DOM/Window 10 31.12.2010 14:23
сравнение 2-х multiple select'ов silwerclaw jQuery 2 21.12.2010 15:50