为什么jsonObjects [i] .type未定义?

时间:2014-02-24 10:36:34

标签: javascript jquery html jsonobject

当我点击(onclick="changeTyp")时,它会将值更改为我点击的间隔。但它在jsonObjects[i].type上说未定义。 也许我必须将jsonObjects[i]发送给changeType函数? 有人可以给我一些关于我应该做什么的提示吗?

我声明了jsonObjects:

var jsonObjects = []; 

function populateTypes() {

    for(i = 0; i < jsonObjects.length; i++) {

        if(availableTypes.indexOf(jsonObjects[i].type) < 0) {

            availableTypes.push(jsonObjects[i].type);
            $("#changetotypes").append('<li><a href="#" onclick="changeType(\'' + jsonObjects[i].type + '\')">' + jsonObjects[i].type + '</a></li>');
       } 
    }
}

function changeType(type) {

    $( "#currenttype" ).html("Aktuell Typ: " + jsonObjects[i].type);
}

这是我的HTML代码:

<li>
    <a href="#"><span id="currenttype" title=""></span></a>
    <ul id="changetotypes"></ul>
</li>

这是jsonObjects文件:

"c3000": {"x": 675, "y": 269, "plan":1, "name":"c3000", "img":"sensor3.png", "added":"datetime", "type":"c", "interval":"0", "comment":"enmassatext", "active":true, "value":"4c", "radie":false, "alarm":false},
"r3002": {"x": 223, "y": 355, "plan":1, "name":"r3002", "img":"sensor2.png", "added":"datetime", "type":"r", "interval":"6", "comment":"enmassatext", "active":true, "value":"-4c", "radie":false, "alarm":true},
"r3003": {"x": 300, "y": 100, "plan":1, "name":"r3003", "img":"sensor1.png", "added":"datetime", "type":"e", "interval":"3", "comment":"enmassatext", "active":false, "value":"15c", "radie":false, "alarm":false},

2 个答案:

答案 0 :(得分:1)

这是因为你试图遍历一个不存在的数组结构。您的JSON定义了一个包含一组对象的对象,而不是一个对象数组。所以而不是:

var jsonObject = [obj, obj, obj];

你最终得到的JS结构是:

var jsonObject = { c3000: obj, r3002: obj, r3002: obj};

(我不确定你为什么要在顶部将jsonObjects声明为数组。)

你应该使用的循环是:

// var your loop variables or you'll end up in trouble
for (var k in jsonObjects) {
  var type = jsonObjects[k].type;
  if (availableTypes.indexOf(type) < 0) {
    availableTypes.push(type);
    $('#changetotypes').append('<li><a class="typechange" data-type="' + type + '">' + type + '</a></li>');
  }
}

由于您正在使用jQuery,因此请删除内联JS并使用类和数据属性:

$(document).on('click', '.typechange', function (e) {
  e.preventDefault();
  var type = $(this).data('type');
  $('#currenttype').html('Aktuell Typ: ' + type);
});

Fiddle

答案 1 :(得分:0)

退房:http://jsfiddle.net/4zXkJ/

你的JSON是一个对象,而不是一个数组,这里是你如何循环对象的属性:

for(var i in jsonObjects) {

    if(availableTypes.indexOf(jsonObjects[i].type) < 0) {

        availableTypes.push(jsonObjects[i].type);
        $("#changetotypes").append('<li><a href="#" onclick="changeType(\'' + jsonObjects[i].type + '\')">' + jsonObjects[i].type + '</a></li>');
   } 
}

同样在changeType中使用类型参数:

function changeType(type) {
    $( "#currenttype" ).html("Aktuell Typ: " + type);
}