Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 24.02.2018
Сообщений: 4

Зависимые списки

24.02.2018, 12:28. Показов 7201. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! подскажите, есть такой код. Необходимо, чтобы было 4 списка по порядку зависимые от первого к последнему. И чтобы выбранные результаты затем обработать другим скриптом. Куда копать?

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<html>
  <head>
  <title>Связанные селекты</title>
  
  <!-- Подключаем javascript-библиотеку функций -->
  <script type="text/javascript" src="linkedselect.js"></script>
</head>
 
<body>
 
<!-- Первый (главный) список (изначально заполнен вручную) -->
  <select size="4" id="List1">
    <option value="ie"> Internet Explorer </option>
    <option value="safari"> Safari </option>
  </select>
  
<!-- Подчиненный список 1 (изначально пуст) -->
  <select size="4" id="List2"></select>
  
<!-- Подчиненный список 2 (изначально пуст) -->
  <select size="4" id="List3"></select>
  
<script type="text/javascript">
// Создаем новый объект связанных списков
var syncList1 = new syncList;
 
// Определяем значения подчиненных списков (2 и 3 селектов)
syncList1.dataList = {
 
/* Определяем элементы второго списка в зависимости 
от выбранного значения в первом списке */
 
  'ie':{
      'ie_win':'Windows',
      'ie_mac':'Mac'
  },
  
  'safari':{
      'safari_mac':'Mac'
  },
 
/* Определяем элементы третьего списка в зависимости 
от выбранного значения во втором списке */
 
  'ie_win':{
      'ie_win_5':'версия 5',
      'ie_win_6':'версия 6'
  },
  
  'ie_mac':{
      'ie_mac_5':'версия 5'
  },
  
  'safari_mac':{
      'safari_mac_1':'версия 1',
      'safari_mac_2':'версия 2'
  }
};
 
// Включаем синхронизацию связанных списков
syncList1.sync("List1","List2","List3");
</script>
 
</body>
</html>
собственно сам скрипт

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
 
syncList - "класс" связанных списков
*/
function syncList(){} //Определяем функцию конструктор
 
//Определяем методы
 
//Метод sync() - принимает список из значений атрибутов id элементов SELECT, образующих связанный список и запускает их синхронизацию
syncList.prototype.sync = function()
{
    //Перебираем аргументы (id элементов SELECT) и назначаем событиям onChange селектов, с соответствующими id, функцию-обработчик. 
    //В качестве обработчика выступает второй метод объекта syncList - _sync (напрямую его вызывать не нужно) 
    //Обработчик назначается всем элементам SELECT кроме последнего в списке аргументов, т.к. последний не влияет ни на какой другой элемент SELECT и с ним не нужно синхронизироваться.
    for (var i=0; i < arguments.length-1; i++)  document.getElementById(arguments[i]).onchange = (function (o,id1,id2){return function(){o._sync(id1,id2);};})(this, arguments[i], arguments[i+1]);
    document.getElementById(arguments[0]).onchange();//запускаем обработчик onchange первого селекта, чтобы при загрузке страницы заполнить дочерние селекты значениями.
}
//служебный метод _sync - срабатывает при смене выбранного элемента в текущем (старшем) элементе SELECT (по его событию onChange) и изменяет содержимое зависимого селекта на основании значения выбранного в старшем селекте.
syncList.prototype._sync = function (firstSelectId, secondSelectId)
{
    var firstSelect = document.getElementById(firstSelectId);
    var secondSelect = document.getElementById(secondSelectId);
 
    secondSelect.length = 0; //обнуляем второй (подчиненный) SELECT
    
    if (firstSelect.length>0)//если первый (старший) SELECT не пуст
    {
        //из свойства dataList, с данными для заполнения подчиненных селектов, берем ту часть данных, которая соответствует именно значению элемента, 
        //выбранного в первом селекте, и определяет содержимое подчиненного элемента SELECT.
        var optionData = this.dataList[ firstSelect.options[firstSelect.selectedIndex==-1 ? 0 : firstSelect.selectedIndex].value ];
        //заполняем второй (подчиненный) селект значениями (создаем элементы option)
        for (var key in optionData || null) secondSelect.options[secondSelect.length] = new Option(optionData[key], key);
        
        //если в старшем SELECT-е нет выделенного пункта, выделяем первый
        if (firstSelect.selectedIndex == -1) setTimeout( function(){ firstSelect.options[0].selected = true;}, 1 );
        //если во втором списке нет выделенного пункта, выделяем первый его пункт
        if (secondSelect.length>0) setTimeout( function(){ secondSelect.options[0].selected = true;}, 1 );
    }
    //если второй (подчиненный) селект имеет в свою очередь свои подчиненные селекты (те, для которых он главный), 
    //то запускаем его обработчик onchange, чтобы изменить его подчиненные селекты
    secondSelect.onchange && secondSelect.onchange();
};
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.02.2018, 12:28
Ответы с готовыми решениями:

Зависимые поля формы
день добрый. такая ситуация: на сайте есть фильтр в котором поля зависят от выбора предыдущих значений марка авто -&gt; модель авто...

Зависимые поля в калькуляторе
Здравствуйте, опыта в js нет, помогите с привязкой нескольких полей к одному: т.е чтобы при определённом выборе, выпадающем из списка,...

Как организовать зависимые селекты?
Друзья, есть такой html &lt;div id=&quot;f_lr1ro&quot; class=&quot;field ft_list&quot;&gt; &lt;label for=&quot;lr1ro&quot;&gt;Есть ли у вас авто&lt;/label&gt;&lt;select...

2
Юзер с абсолютным слухом
 Аватар для Опан
709 / 489 / 195
Регистрация: 17.12.2010
Сообщений: 1,428
24.02.2018, 15:45
Может пригодится пример на эту тему:
Взаимосвязь select-ов
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Страна: <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>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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;
    }
}
0
0 / 0 / 0
Регистрация: 24.02.2018
Сообщений: 4
24.02.2018, 23:51  [ТС]
Со списками разобрался. Все получилось. Теперь другой вопрос((( Например форма заполнилась и получилось по примеру:

windows\IExplorer\версия5\portable

Как из этой формы вытащить эти четыре значения например баттоном и сравнить с другим значением заранее прописанным(по аналогии теста - верно неверно). Чтобы если совпали перейти например на следующую страницу, а если нет то повторить ввод?? Помогите форумчане( Всю голову сломал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.02.2018, 23:51
Помогаю со студенческими работами здесь

Зависимые списки, снова списки и проблема
&lt;div class=&quot;t-product__option js-product-option newselect&quot;&gt; &lt;div class=&quot;t-product__option-title t-descr t-descr_xxs...

Зависимые выпадающие списки
Добрый день. прошу помочь в реализации одной задачи. Сразу прошу обратить внимания, опыта очень мало в данном вопросе. Необходимо...

Снова зависимые списки
Здравствуйте, форумчане. подскажите как реализовать: есть два связанных списка, накидал тут по быстрому: &lt;select...

Зависимые списки четырех значений
Добрый день! Как реализовать зависимые списки четырех значений на данном примере? &lt;select id=&quot;country_id&quot;...

Зависимые select на javascript и вывод результата в DIV
Добрый день, при создании калькулятора с зависимым select я столкнулся с проблемой. У меня не выводится результат в теге DIV. Я полный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru