Многомерный Javascript в HTML-форме

Я хотел бы вставить многомерный массив в Javascript в два разных элемента select в форме HTML.

1. HTML

<select class = "formDepartamento" id = "depertamentoId" name = "departamento">
<option value = "" disabled selected>Departamento</option>
</select>
<select class = "formLocalidad" id = "localidadId" name = "localidad">
<option value = "" disabled selected>Localidad</option>
</select>

2.Javascript

var selecDepartamento = document.getElementById("depertamentoId");
var selecLocalidad = document.getElementById("localidadId");

var dptosLocs = {
  "Rio de Janeiro": ["Rio de Janeiro", "Seropedica"],
  "Bahia": ["Salvador", "Morro de Sao Paulo"],
  "Sao Paulo": ["Montevideo"],
  "Curitiba": ["Salto", "Daymán", "Arapey"]
}

for(var i = 0; i < dptosLocs[i].length; i++) {
 for(var z = 0; z < dptosLocs.length; z++) {
    console.info(dptosLocs[z][i]);
 }
}

Вот jsfiddle:

https://jsfiddle.net/pemagalhaesrj/r4ah87ze/5/

Что я ожидаю

Установите «выбирает» в соответствии со структурой массива.

"formDepartament" для Рио-де-Жанейро, Баии, Сан-Паулу и Куритибы и "formLocalidad" для заполнения «Рио-де-Жанейро», «Серопедика», «Сальвадор», «Морро-де-Сан-Паулу» и т. д.

Совершенно не ясно, каким должен быть ваш конечный результат на основе информации в вашем вопросе. Хотите обновить вопрос, чтобы показать ожидаемый результат?

Tigger 02.09.2018 09:20

Хорошо, обновлено. Сожалею.

Pedro Magalhaes 02.09.2018 09:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Может быть, это то, что вам нужно? Не уверен, но возможно.

Редактировать - Основные изменения. Я считаю, что это именно то, что вам нужно сейчас, и также вижу ответ Джермы Винсмок.

var selecDepartamento = document.getElementById("depertamentoId");
var selecLocalidad = document.getElementById("localidadId");

var dptosLocs = {
  "Rio de Janeiro": ["Rio de Janeiro", "Seropedica"],
  "Bahia": ["Salvador", "Morro de Sao Paulo"],
  "Sao Paulo": ["Montevideo"],
  "Curitiba": ["Salto", "Daymán", "Arapey"]
}

// called when the city has been selected
function cityChange(e) {
    // first, clear the options, incase of a change
    selecLocalidad.innerHTML = '<option value = "" disabled selected>Localidad</option>';
    // add the options based on the selected city
    if (e.target.value) {
        var i, opt;
        for(i=0;i<dptosLocs[e.target.value].length;i++) {
            opt = document.createElement("option");
            opt.value = dptosLocs[e.target.value][i];
            opt.textContent = dptosLocs[e.target.value][i];
            selecLocalidad.appendChild(opt);
        }
    }
}

// do the work once the page has loaded
window.onload = function() {
    var city, i, opt;
    for(city in dptosLocs) {
        opt = document.createElement("option");
        opt.value = city;
        opt.textContent = city;
        selecDepartamento.appendChild(opt);
    }
    // add a listener
    selecDepartamento.addEventListener('change',cityChange,false);
}
<select class = "formDepartamento" id = "depertamentoId" name = "departamento">
<option value = "" disabled selected>Departamento</option>
</select>
<select class = "formLocalidad" id = "localidadId" name = "localidad">
<option value = "" disabled selected>Localidad</option>
</select>

Почти готово! Проблема в том, что localidadId должен быть обусловлен тем, какой depertamentoId выбирает клиент. Например, если вы выбрали Рио де Жанейро, опция должна быть только "Рио де Жанейро" и "Серопедика".

Pedro Magalhaes 02.09.2018 18:29

@ P.Magalhaes: См. Обновленный ответ. Я уверен, что это то, что вам нужно.

Tigger 03.09.2018 13:01

Большое спасибо! Это лучший класс на свете. Задача решена.

Pedro Magalhaes 03.09.2018 16:18

@Tigger, спасибо за кредит! Я поддержал ответ.

Germa Vinsmoke 03.09.2018 18:40

Благодаря ответу Тигра ваша проблема была решена. Поскольку ваш второй раскрывающийся список зависел от первого, поэтому с помощью event.target.value значение первого раскрывающегося списка было сохранено в переменной города, и с этим был заполнен второй раскрывающийся список. Для каждого нового значения в первом раскрывающемся списке второе раскрывающееся меню должно изменяться, поэтому при каждом вызове функции changed() второе раскрывающееся меню сначала очищается с помощью selecLocalidad.innerHTML = "";.

<select class = "formDepartamento" id = "depertamentoId" name = "departamento" onchange = "changed()">
    <option value = "" disabled selected>Departamento</option>
</select>
<select class = "formLocalidad" id = "localidadId" name = "localidad">
    <option value = "" disabled selected>Localidad</option>
</select>
<script>
    var selecDepartamento = document.getElementById("depertamentoId");
    var selecLocalidad = document.getElementById("localidadId");

    var dptosLocs = {
        "Rio de Janeiro": ["Rio de Janeiro", "Seropedica"],
        "Bahia": ["Salvador", "Morro de Sao Paulo"],
        "Sao Paulo": ["Montevideo"],
        "Curitiba": ["Salto", "Daymán", "Arapey"]
    }

    var city, i, opt, opt2;
    for (city in dptosLocs) {
        opt = document.createElement("option");
        opt.value = city;
        opt.textContent = city;
        selecDepartamento.appendChild(opt);
    }
    function changed(selecDepartamento) {
        city = event.target.value;
        selecLocalidad.innerHTML = "";
        for (i = 0; i < dptosLocs[city].length; i++) {
            opt2 = document.createElement("option");
            opt2.value = dptosLocs[city][i];
            opt2.textContent = dptosLocs[city][i];
            selecLocalidad.appendChild(opt2);
        }
    }
</script>

Как очистить все параметры в раскрывающемся списке?

Другие вопросы по теме