Javascript 将对象存储在组合框中

标签 javascript drop-down-menu

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

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

存储在名为airports的数组中。然后,我有一个 idcombo 的组合框,该组合框是从对象数组中填充的,组合框显示对象的名称:

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;

但是,当我执行 latlonconsole.log 时,它们显示为未定义。

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

最佳答案

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

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

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>

关于Javascript 将对象存储在组合框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49128470/

相关文章:

javascript - 为什么这个函数返回 "'\'1\' ' "according to codewars?

javascript - 用于选择 HTML <option> 的 Jquery 方法

css - 重点?如何在鼠标移动时关闭

c# - 更新面板内的 DropDownList AutoPostBack 丢失了 CSS 设计

javascript - java脚本将输入表单中的字母大写

javascript - 使用视差效果, 'Active' 导航选项问题

javascript - 通过 jquery 获取多个选择框的值

css - 导航菜单(带有子菜单树)在 IE 6、IE7、IE8 中中断

javascript - 正则表达式 - 除 "e"之外的任何字母表

javascript - 如何找到innerHTMLs的平均值?