首页 > 解决方案 > 如何从数组中动态设置下拉列表的值

问题描述

我正在尝试从下拉列表中获取值。我有下拉列表,我有我想要的值,但我不知道如何将它们相互链接。所以类别的值应该放在下拉列表中,然后该字符串中的图像值应该是结果。

这是名为 ill.json 的 JSON 文件数组

...
[{"id":"7","category":"Lente collectie 2021","image":"Teddy_bears_10.png"},{"id":"11","category":"Lente collectie 2021","image":"Individual_floral_elements_01.png"}
...

类别值进入下拉列表,然后结果应该是图像值:这是我的下拉列表...

const req = new XMLHttpRequest();
req.open('GET', 'ill.json', true);
req.send();
req.onload = function() {
  const json = JSON.parse(req.responseText);
  let dropdown = "";
  let html = "";
  //FILLING DROPDOWN WITH CATEGORYs
  var result = json.reduce(function (r, a) {
        r[a.category] = r[a.category] || [];
        r[a.category].push(a);
        return r;
    }, Object.create(null));
    let keys = Object.keys(result)
    keys.forEach((key) => {
    dropdown += "<select id='select'>"
    dropdown += "<option value='" + key + "'>"
    dropdown += key
    dropdown += "</option>"
    dropdown += "</select"
  })
  document.getElementsByClassName('dropdown')[0].innerHTML = dropdown;

...

这就是我得到图像的方式......

//get all images
  json.forEach(function(val) {
      html += "<div class='illustratie-item'>";
      html += "<img class='dt-filelist-image' src='" + val.image + "'/>"

    html += "</div><br>";
});
document.getElementsByClassName('illustratie-wrapper')[0].innerHTML = html;
...

标签: javascriptjqueryarraysjsondropdown

解决方案


检查以下代码段。

var images = [{"id":"7","category":"Lente collectie 2020","image":"Teddy_bears_10.png"},{"id":"11","category":"Lente collectie 2021","image":"Individual_floral_elements_01.png"}];

var dropdown = '';

dropdown  += '<select id="select">';
Object.keys(images).forEach(function(key) {
    dropdown += '<option value="' + images[key].id + '">';
    dropdown += images[key].category;
    dropdown += '</option>';
});

dropdown += '</select>';

document.getElementsByClassName('dropdown')[0].innerHTML = dropdown;

var categorySelect = document.querySelector('#select');
categorySelect.addEventListener('change', function(evt) {
    var item = images.find(function(item) {
        return item.id === evt.target.value;
    });
    console.log( item.image );
});
<div class="dropdown"></div>


推荐阅读