Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Работа с JSON (https://javascript.ru/forum/dom-window/77938-rabota-s-json.html)

l_mke 04.07.2019 22:30

Работа с JSON
 
Доброго времени суток!

Подскажите пожалуйста, у меня в форме есть:

<select class="input_form delivery select" name="delivery" required >
	<option value="">Выберите пункт</option>
</select>


Остальные пункты <option value=""></option> добавляются из JSON файла и именно тут должны находиться ключи объектов.


var requestURL = '/1234.json';
var request = new XMLHttpRequest();
request.open('GET', requestURL,true);
request.responseType = 'json';
request.send();
let selectMarc = document.querySelector('[name=delivery]');
let selectModels = document.querySelector('[name=models]');
request.onload = function(data) {
    var car = request.response;    
    ShowCarModels(car);
}
function ShowCarModels(car){
        var key = Object.keys(car);
        for (var i = 0; i <key.length; i++) {
            var myOption = document.createElement('option').cloneNode(true);
            myOption.setAttribute('value', key[i]);
            myOption.textContent = key[i];
        }
        selectMarc.appendChild(myOption);
        console.log(myOption); 
}


Проблема в том, что создается только один пункт option с именем последнего объекта, подскажите как вывести все имена объектов имеющиеся в файле в форму.

рони 04.07.2019 22:59

l_mke,
18 строку перенесите на 20

рони 04.07.2019 23:01

Цитата:

Сообщение от l_mke
.cloneNode(true);

это не нужно

l_mke 04.07.2019 23:03

Спасибо большое)

рони 04.07.2019 23:06

l_mke,
какой формат у car?

l_mke 06.07.2019 15:25

json

l_mke 06.07.2019 15:33

А еще можете подсказать, вот этот кусок кода выводит то что есть в объекте в другой select в соответствии какой был выбран Object.keys(car),

<select class="input_form models select" name="models" required>
	<option value="">Выберете пункт</option>
</select>


selectMarc.onchange = function(e){
            var marcValue = e.target.value;
            var modelOptions = '<option value="">Модель авто</option>';
            console.log(car[marcValue]);
            if(car[marcValue]){
                for (var j = 0; j < car[marcValue].length; j++) {
                    var myOptionModel = document.createElement('option');
                    myOptionModel.setAttribute('value', car[marcValue][j]);
                    myOptionModel.textContent = car[marcValue][j];
                    selectModels.appendChild(myOptionModel);
                }  
            }
        }



при выборе пункта он добавляет то что содержится в объекте , но если выбрать сначала один, а потом нажать на другой, то он не удаляет, то что относилось к другому пункту, подскажите пожалуйста, что можно с этим сделать

рони 06.07.2019 16:16

l_mke,
if(car[marcValue]){
*!*
                selectModels.options.length = 1;
*/!*
                for (var j = 0; j < car[marcValue].length; j++) {

l_mke 07.07.2019 13:15

Спасибо за помощь!


Часовой пояс GMT +3, время: 06:37.