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