如何解释jQuery Autocomplete插件的解析函数的语法

时间:2009-07-28 03:37:25

标签: jquery syntax autocomplete

我使用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: "" 
  }
});

我收到有关无效标签数据的错误消息。有任何想法吗?感谢。

2 个答案:

答案 0 :(得分:2)

这是因为JavaScript会插入自动分号。

检查https://stackoverflow.com/questions/1188551/common-programming-mistakes-for-javascript-developers-to-avoid/1188800#1188800

如果你有像

这样的代码
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: "" 
  }
});