unStaiL
@unStaiL

Как сделать динамический выпадающий список на javascript?

Добрый день.
Есть подобный массив массив.
CODE

{
  "total": "2",
  "univer": [
    {
      "id": 1,
      "faculty": "Ф1",
      "total": 3,
      "chairs": [
        "к1",
        "к2",
        "к3",
      ]
    },
    {
      "id": 2,
      "faculty": "Ф2",
      "total": 2,
      "chairs": [
        "к1",
        "к2",
      ]
    }
]
}


Храним его пока что строкой в переменной
var chair = '{"total":"2","univer":[{"id":1,"faculty":"Ф1","total":3,"chairs":["к1","к2","к3",]},{"id":2,"faculty":"Ф2","total":2,"chairs":["к1","к2",]}]}';


есть два блока
Задача состоит в том что бы при выборе в первом блоке допустим Ф1.
Во второй блок загружались значения
ajaxObj.univer[i].chairs[j]
где i - индекс или же его можно получить как ajaxObj.univer[i].id - 1 т.к. простая индексация с нуля.
а j это индексы элементов из chairs
Мне удалось передать значения в поле input, в данном случае передаю id, но можно и имя, код ниже.
CODE_2

<select id="myselect" onchange="javascript:selectChanged();">
<script type="text/javascript">
var chair = '{"total":"2","univer":[{"id":1,"faculty":"Ф1","total":3,"chairs":["к1","к2","к3"]},{"id":2,"faculty":"Ф2","total":2,"chairs":["к1","к2"]}]}';
			var ajaxObj = JSON.parse(chair);
			var m = ajaxObj.total - 1;
			document.write('<option>Выберете из списка</option>');
		        for (var i = 0; i <= m; i++){
			document.write('<option name=' + ajaxObj.univer[i].id + ' value="' + ajaxObj.univer[i].id + '">' + ajaxObj.univer[i].faculty + '</option>');
		}
           function selectChanged() {
            var sel = document.getElementById('myselect');
            var str = sel.selectedIndex ? (sel.options[sel.selectedIndex].value) : '0';
            document.getElementById('my').value = str;
			}
</script>
</select>
<input type="text" id="my">


Не знаю как сделать загрузку второго списка и его обновление при изменении значений в первом списке.
Пробовал по аналогии ловить значения из поля var sel = document.getElementById('my'); и передавать их в цикл, но это глупо, да и не получилось.
Суть в том что при выборе в первом - Ф1, во втором можно выбирать к1,к2,к3 из его(Ф1) набора, а при выборе в первом Ф2 - к1, к2. соответственно из набора Ф2.
Буду искренне благодарен за помощь. (:
  • Вопрос задан
  • 6515 просмотров
Решения вопроса 1
unStaiL
@unStaiL Автор вопроса
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
DeLaVega
@DeLaVega
Верстаю, фронтэндю =)
Время позднее, и мозг не соображает как правильно написать, но логику я бы на вашем месте чутка изменил. Вы делаете перебор и сразу добавляете значения. Попробуйте иначе - создайте переменные, допустим - chairs1 и chairs2, и в каждую из них сохраните контент их массива, то есть в них у вас должно храниться что-то типа "123" И на события change у первого селекта, заполнять второй той или иной переменной.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы