我使用jQuery Autocomplete插件在搜索框中显示用户信息,我无法弄清楚以下解析函数的语法含义:
$("#UserSearchBox").autocomplete('FindUser.ashx',
{
minChars: 2,
width: 400,
max: 5,
parse: function(data)
{
return $.map(eval(data), function(row)
{
return {
data: row,
value: row.UserID,
result: ""
}
});
},
formatItem: function(item)
{
return FormatUser(item);
});
插件工作正常:它从HTTP处理程序检索用户信息的JSONified数组,并在FormatUser函数的帮助下显示格式化的值,但我真的想知道下面的代码是做什么的(我只是从样本并调整为用户对象):
return $.map(eval(data), function(row)
{
return {
data: row,
value: row.UserID,
result: ""
}
});
另外,为什么第二次返回的左括号必须与return语句位于同一行?如果我将代码更改为:
return $.map(eval(data), function(row)
{
return
{
data: row,
value: row.UserID,
result: ""
}
});
我收到有关无效标签数据的错误消息。有任何想法吗?感谢。
答案 0 :(得分:2)
这是因为JavaScript会插入自动分号。
如果你有像
这样的代码function test()
{
int i = 5;
return
{
output : i
};
}
它被解释为:
function test()
{
int i = 5;
return; //automatic semicolon insertion by JavaScript the code below is dead code.
{
output : i
};
}
这就是为什么你需要与'return'在同一行上的左括号。
答案 1 :(得分:1)
JavaScript有一些关于分号的语法规则,导致这样的事情。如果在一条线的末端可以放置一个分号,那么就放置它。这是让你忘记把它们放在各种各样的地方的原因。它也会导致这种情况,因为返回可以单独使用。
解析器看到了这个:
return $.map(eval(data), function(row)
{
return ;
{
data: row,
value: row.UserID,
result: ""
}
});