当我点击(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},
答案 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);
});
答案 1 :(得分:0)
你的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);
}