在尝试将部分Json字符串传递给函数时,我收到以下错误:
元素列表后缺少]
Json字符串如下所示: -
var data = [
{
id: 1, name: "254201075698", series: [
{
name: "",
reference: "254201075698",
note: "A test note",
color: "#f0f0f0"
}
]
},
{
id: 2, name: "254201075699", series: [
{
name: "",
reference: "254201075699",
note: "A test note",
color: "#e0e0e0"
}
]
}
];
在for循环中,我尝试执行以下操作: -
item.append(jQuery("<div>", {
"class": "",
"css": { ""}
}).append('<a href="javascript:void(0);" title="View details on '+data[i].name+'" onClick="showInfoDialog('+data[i].series+');return false;">'+data[i].name+'</a>'));
但showInfoDialog参数似乎抛出错误,我不知道为什么,有什么想法?
showInfoDialog看起来像: -
function showInfoDialog(data) {
console.log(data);
clearMessages();
var html ='';
var id = data.id;
html += '<p><label for="client">Reference: </label> '+data.reference+'</p>';
$('#dialogContainer').html(html);
$('#loader').hide();
$('.dialogDiv').dialog('option', 'title', data.reference);
$(".dialogDiv").dialog('open');
}
For循环: -
for (var i = 0; i < data.length; i++) {
}
答案 0 :(得分:2)
你不能这样做....
onClick="showInfoDialog('+data[i].series+')
它只会将其转换为showInfoDialog([object Object])
- 您需要 jsonify data [i] .series - 或者更好的是,只需附加一个click
事件。< / p>
jQuery('<a href="javascript:" title="View details on '+data[i].name+'">')
.html(data[i].name)
.click(function() {
showInfoDialog(data[i].series);
})
.wrap('<div></div>')
.appendTo(item);
答案 1 :(得分:1)
`onClick="showInfoDialog('+data[i].series+');return false;">'` ...
data [i] .series是一个数组,但你似乎并没有在showInfoDialog()函数中将它用作数组:
答案 2 :(得分:1)
blah blah blah ... onClick="showInfoDialog('+data[i].series+'); ... blah blah blah
这是您的错误所在。
data[i].series
是一个数组对象。它使用toString转换为文本,默认情况下输出“[object object]”或类似的东西。您需要先将该数组转换为JSON(例如JSON.stringify)。
或者,你可以这样做:
blah blah blah ... onClick="showInfoDialog(data[' + i + '].series); ... blah blah blah
它只是在寻找一个名为“data”的全局变量(假设您的var data
是全局可访问的)。例如,如果i = 42,则字符串将变为:
blah blah blah ... onClick="showInfoDialog(data[42].series); ... blah blah blah
答案 3 :(得分:0)
你说你正在使用for-in循环,我假设它迭代data
数组。
您永远不应该使用for-in来迭代数组,因为您很可能会返回Array基类的成员以及数组元素本身。查看this JSFiddle
代码:
for (var x in data){
alert(data[x]); //shed-loads of alerts!
}
for (var x in data){
//can use this
if (data.hasOwnProperty(x)){
alert(data[x]);
}
}
//best just iterate with a standard for loop
for (var x=0; x<data.length; x++){
alert(data[x]);
}
使用从0循环到data.length的for
循环(如上所述)