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



当我单击(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},

这是因为您尝试遍历不存在的数组结构。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);
});

小提琴

退房: 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);
}

相关内容

最新更新