2013-05-08 167 views
41

我在我的java sevlet中有一张地图并将其转换为正确的json格式。jQuery--从json填充选择

当我在下面执行此功能时,会创建一个下拉菜单,但它会将每个字符作为选项? 这是我的了:JSON格式

$(document).ready(function(){ 
    var temp= '${temp}'; 
    //alert(options); 
    var $select = $('#down');       
    $select.find('option').remove();       
    $.each(temp, function(key, value) {    
     $('<option>').val(key).text(value).appendTo($select);  
    }); 
}); 

地图内容

{"1" : "string","2" : "string"} 
+0

确定临时变量是正确的您可以在插件添加的功能呢? – FishBasketGordo 2013-05-08 13:52:13

+1

你不是读一个json对象,而是一个字符串,所以$ .each得到了一个字符串的每个字母。尝试console.log(temp);所以你可以有一个你想要的对象的想法 – joao 2013-05-08 13:52:16

+4

你可能还需要为你的临时变量做一个'JSON.parse'来将它从一个字符串转换为一个实际的js对象。 – 2013-05-08 14:00:47

回答

59

我会做这样的事情:

$.each(temp,function(key, value) 
{ 
    $select.append('<option value=' + key + '>' + value + '</option>'); 
}); 

JSON结构,将不胜感激。起初你可以试用find('element') - 它取决于JSON。

+4

它应该是$ .each(temp,function(key,value) – NullPointerException 2013-05-08 13:58:48

+0

'temp'不是一个jQuery对象...它没有.each或.find。 – 2013-05-08 13:59:27

+0

是的,代码编辑。 – 2013-05-08 14:00:32

2

fiddle

var $select = $('#down'); 
$select.find('option').remove(); 
$.each(temp,function(key, value) 
{ 
    $select.append('<option value=' + key + '>' + value + '</option>'); 
}); 
+0

这会工作与他已有的一样,他的'temp'变量有问题,而不是他如何生成选项。 – 2013-05-08 13:58:49

+0

究竟.....我得到了同样的东西 – 2013-05-08 14:00:47

+1

如果他发布的JSON映射是正确的,那么代码应该运行正常 – NullPointerException 2013-05-08 14:02:41

1

我只是用JavaScript控制台在Chrome中做到这一点。我用占位符替换了一些你的东西。

var temp= ['one', 'two', 'three']; //'${temp}'; 
//alert(options); 
var $select = $('<select>'); //$('#down');       
$select.find('option').remove();       
$.each(temp, function(key, value) {    
    $('<option>').val(key).text(value).appendTo($select); 
}); 
console.log($select.html()); 

输出:

<选项值= “0”>一个< /选项> <选项值= “1”> 2 < /选项> <选项值= “2”> 3 < /选项>

但是它看起来像你的JSON可能是一个字符串,因为以下最终会做你的描述。所以让你的JSON实际的JSON不是一个字符串。

var temp= "['one', 'two', 'three']"; //'${temp}'; 
//alert(options); 
var $select = $('<select>'); //$('#down');       
$select.find('option').remove();       
$.each(temp, function(key, value) {    
    $('<option>').val(key).text(value).appendTo($select); 
}); 
console.log($select.html()); 
0

我相信这可以帮助你:

$(document).ready(function(){ 
    var temp = {someKey:"temp value", otherKey:"other value", fooKey:"some value"}; 
    for (var key in temp) { 
     alert('<option value=' + key + '>' + temp[key] + '</option>'); 
    } 
}); 
23

只有改变DOM一次...

var listitems = ''; 
$.each(temp, function(key, value){ 
    listitems += '<option value=' + key + '>' + value + '</option>'; 
}); 
$select.append(listitems); 
+0

性能最好 – 2015-04-29 08:50:55

+8

您必须执行var listitems ='';'''或者您得到一个undefined concat – 2015-04-29 09:04:54

+0

这应该是公认的答案 – SiamKreative 2016-12-27 09:00:35

0

,在阿贾克斯做工精细回调从JSON对象

更新选择
function UpdateList() { 
    var lsUrl = '@Url.Action("Action", "Controller")'; 

    $.get(lsUrl, function (opdata) { 

     $.each(opdata, function (key, value) { 
      $('#myselect').append('<option value=' + key + '>' + value + '</option>'); 
     }); 
    }); 
} 
4

一种解决方案是CREA你自己的jquery插件采用json地图并用它填充选择。

(function($) {  
    $.fn.fillValues = function(options) { 
     var settings = $.extend({ 
      datas : null, 
      complete : null, 
     }, options); 

     this.each(function(){ 
      var datas = settings.datas; 
      if(datas !=null) { 
       $(this).empty(); 
       for(var key in datas){ 
        $(this).append('<option value="'+key+'"+>'+datas[key]+'</option>'); 
       } 
      } 
      if($.isFunction(settings.complete)){ 
       settings.complete.call(this); 
      } 
     }); 

    } 

}(jQuery)); 

您可以通过这样称呼它:

$("#select").fillValues({datas:your_map,}); 

的优点是,任何地方,你也会面临同样的问题,你只需要调用

$("....").fillValues({datas:your_map,}); 

的Et瞧!

,只要你喜欢

0
$(JSON.parse(response)).map(function() { 
    return $('<option>').val(this.value).text(this.label); 
}).appendTo('#selectorId'); 
+0

仅供参考,现在不推荐使用$ .parseJSON。本机JSON.parse()是首选。 – David 2017-09-19 15:07:38