代码之家  ›  专栏  ›  技术社区  ›  MrB

组合框中的Javascript存储对象

  •  0
  • MrB  · 技术社区  · 7 年前

    我有一堆格式如下的对象:

    var Manchester ={ 
         name: "Manchester",
         latitude:53.3,
         longitude:-2.2
    };
    

    存储在名为 airports 。然后我有一个带有 id 属于 combo 从对象数组填充的,组合框显示对象的名称:

    for(var i=0; i<airports.length; i++){
        var opt=airports[i];
        var el=document.createElement("option");
        el.textContent=opt.name;
        el.value=opt;
        document.getElementById("combo").append(el);
    }
    

    然后,我希望能够读取对象的其他两个属性:

    var e = document.getElementById("combo");
    var lat= e.options[e.selectedIndex].value.latitude;
    var lon= e.options[e.selectedIndex].value.longitude;
    

    然而,当我这样做的时候 console.log 第页,共页 lat lon 它们显示为未定义。

    组合框是否将变量存储为其值?如果没有,我如何做,如果是,我如何提取其他信息?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Ele    7 年前

    选项的值用于存储字符串而不是对象。

    另一种方法是使用数据属性。

    var airports = [{
      name: "Manchester",
      latitude: 53.3,
      longitude: -2.2
    }];
    
    for (var i = 0; i < airports.length; i++) {
      var opt = airports[i];
      var el = document.createElement("option");
      el.textContent = opt.name;
      el.value = i;
      el.dataset.lat = opt.latitude;
      el.dataset.lon = opt.longitude;
      document.getElementById("combo").append(el);
    }
    
    document.getElementById("combo").addEventListener('change', function() {
      var lat = this.options[this.selectedIndex].dataset.lat;
      var lon = this.options[this.selectedIndex].dataset.lon;
      console.log(lat, lon);
    });
    <select id='combo'>
    <option>-----</option>
    </select>
        2
  •  1
  •   H77    7 年前

    value 是字符串,因此无法容纳对象。为什么不使用 dataset 相反

    e、 g。

    var airports = [{
      name: "Manchester",
      latitude: 53.3,
      longitude: -2.2
    }];
    
    for (var i = 0; i < airports.length; i++) {
      var opt = airports[i];
      var el = document.createElement("option");
      el.textContent = opt.name;
    
      Object.keys(opt).forEach(function(k) {
        el.dataset[k] = opt[k];
      });
    
      document.getElementById("combo").append(el);
    }
    
    var e = document.getElementById("combo");
    var lat = e.options[e.selectedIndex].dataset.latitude;
    var lon = e.options[e.selectedIndex].dataset.longitude;
    console.log(lat);
    console.log(lon);
    <select id="combo">
    </select>