2

我的javascript代码;

function callDist(sel)
{
   $.getJSON('Dist.json', function(data){
    var $container = $('#parameters').empty();

    $.each(data.distributions, function(i, distribution){
         $.each(distribution, function(key,value) 
         {
          if(distribution.type==sel.value) {
            alert(distribution.name);
            $.each(distribution.parameters, function(key, value) {
            $container.append(key + ':' + value + '<br />');
            $container.append('<hr />');
          });
         }
    });
 }
 );
 });
 }

我的 Json 代码;

{
"distributions":[
  { 
     "name":"Uniform",
     "type":1,
     "parameters":[{ "minValue":2 , "maxValue":4 }]
  },
  {  "name":"Normal",
     "type":2,
     "parameters":[{ "mean":5 , "standartDeviation":3 }]
  },
  {
     "name":"Exponential",
     "type":3,
     "parameters":[{"lamda":2}]
  },
  {
     "name":"Geometric",
     "type":4,
     "parameters":[{"probability":0.2}]
  }
 ]
}

html代码;

<select name="selectDistribution" class="span12"  id="Options"       

 onchange="callDist(this);" >
      <option value="0">Choose one distribution</option>
      <option value="1">Uniform</option>
      <option value="2">Normal</option>
      <option value="3">Exponential</option>
      <option value="4" >Geometric</option>
</select>

在 Json 中有一个由一些分布创建的数组。当用户从选择选项中选择其中一些时,我正在触发 callDist(sel) 函数。当传递的值 sel 等于 distribution.type 时,我想将该分布的参数写入 div。我该怎么做?谢谢。

4

4 回答 4

2
function callDist(sel) {
    $.getJSON('Dist.json', function(json){
        var $container = $('#parameters').empty();


        $.each(json.distributions, function(i, distribution) {
            if(distribution.type==sel.value) {
                $.each(distribution.parameters, function(j, parameters) {
                    $.each(parameters, function(parameter_key, parameter_value) {
                        $container.append(parameter_key + ':' + parameter_value + '<br />');
                        $container.append('<hr />');
                    });
                });
             }
        });
    });
}
于 2013-03-21T15:39:37.290 回答
1

distributions设置为数组后,您必须遍历分布并检查type每个元素的值是否匹配sel,然后将该对象的参数附加到有问题的 div 中,除非位置始终转换为某种类型。如果是这样的话,就像

var distribution = data[(sel-1)]

可用于设置分布。

由于可能存在数组中的位置与类型不对应的情况,因此可能更有意义的是重构 JSON,以便您拥有一个对象而不是数组,如下所示:

{"distributions":{
    "Uniform":{
        "name":"Uniform",
        "type":1,
         "parameters":[{ "minValue":2 , "maxValue":4 }]
    },
    "Normal":{
         "name":"Normal",
         "type":2,
         "parameters":[{ "mean":5 , "standartDeviation":3 }]
    }
  }
}

在这种情况下,我使用该name字段作为distributions对象的属性名称,并且可以通过键入 来获取任何给定分布的参数data[selName].parameters,其中selName是与选择相对应的名称,但您可以轻松地使用类型属性名称。

这两种方法都不需要循环遍历数据。

于 2013-03-21T15:51:51.263 回答
0

我在这里摆弄了一下。我能够看到具有正确值的警报。我用了

$('#Options').change()

触发该功能和一些其他修改以在小提琴上工作。

于 2013-03-21T15:57:20.723 回答
-1

删除第二个逗号

$.each(data.distributions, function(i, distribution,) {
于 2013-03-21T15:40:32.727 回答