密钥显示未定义

时间:2016-02-22 03:39:41

标签: javascript jquery html

我正在尝试使用JavaScript对象的键和值来填充我正在动态创建的下拉菜单的属性和文本。

以下是相关代码

HTML:

<div>
  <select id="docs">
    <option>- Choose a document to preview -</option>
    <option id="specEd" class="eng kor viet esp chin">Special Education Programs</option>
    <option id="parRight" class="eng kor esp">Special Ed. Parents Rights</option>
    <option id="cac" class="eng esp">CAC Brochure</option>
  </select>
</div>
<div id="langSelectBox" class="clearfix">
  <h3>Select a Language</h3>
  <select class="language" style="display:none;">
  </select>
  <div id="brochure">
  </div>
</div>

jQuery的:

$(function() {
  var map = {
    "eng" : "English",
    "esp" : "Español",
    "kor" : "한국어",
    "viet" : "Tiếng Việt",
    "chin" : "中文"
  }

  $brochureSelect.on("change", function() {

    $(".language").html("");
    var selected = $("option:selected", this).attr("class");
    var arr = selected.split(" ");

    $.each(map, function(k, v) {
      $(".language").append("<option id="+map[v]+">"+map[k]+"</option>");
    });
  });
});

当我与map互动时,我的麻烦就出现了。运行时,我有下拉菜单,但所有id属性的值都是undefined。换句话说,函数中的k正在返回undefined。我阅读了$.each的文档,这应该有效,但唯一可行的变量是k。我已经尝试在函数外定义变量map,取走引号,并将双引号更改为单引号。

这是它的样子:

<select class="language">
  <option id="undefined">English</option>
  <option id="undefined">Español</option>
  <option id="undefined">한국어</option>
  <option id="undefined">Tiếng Việt</option>
  <option id="undefined">中文</option>
</select>

我想这样:

<select class="language">
  <option id="eng">English</option>
  <option id="esp">Español</option>
  <option id="kor">한국어</option>
  <option id="viet">Tiếng Việt</option>
  <option id="chin">中文</option>
</select>

2 个答案:

答案 0 :(得分:0)

使用each功能:

k = key (e.g. "eng")

v = value (e.g. "English")

所以你的每个功能都应该是这样的:

$.each(map, function(k, v){

  $(".language").append("<option id="+ k +">"+ v +"</option>");

});

答案 1 :(得分:0)

你只需传递键和值而不是map [k]&amp;地图[V]

$.each(map, function(k, v){
  console.log(k)
  $(".language").append("<option id="+k+">"+v+"</option>");
  });
 });