代码之家  ›  专栏  ›  技术社区  ›  Alek Davis

如何解释jquery autocomplete插件解析函数的语法

  •  0
  • Alek Davis  · 技术社区  · 16 年前

    我使用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 $.map(eval(data), function(row) 
    {
      return 
      {
        data: row,
        value: row.UserID,
        result: "" 
      }
    });
    

    我收到一个关于无效标签的错误 数据 . 有什么想法吗?谢谢。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Community Mohan Dere    8 年前

    这是因为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
        };  
    }
    

    这就是为什么你需要在“返回”的同一行上使用开口撑。

        2
  •  1
  •   KayEss    16 年前

    javascript有一些关于分号的语法规则,这导致了类似的情况。如果在一行的末尾可以放置一个分号,则将其放置。这就是让你忘记把它们放在各种地方的原因。它也会导致这种情况,因为返回可以单独使用。

    解析器会看到:

    return $.map(eval(data), function(row) 
    {
      return ;
      {
        data: row,
        value: row.UserID,
        result: "" 
      }
    });