【问题标题】:How to interpret the syntax of the jQuery Autocomplete plugin's parse function如何解释 jQuery Autocomplete 插件的 parse 函数的语法
【发布时间】:2009-07-28 03:37:24
【问题描述】:

我使用 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 处理程序中检索 JSON 化的用户信息数组,并在 FormatUser 函数的帮助下显示格式化的值,但我真的很想知道以下代码的作用(我只是从样本并针对用户对象进行了调整):

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

另外,为什么第二个 return 的左大括号必须与 return 语句在同一行?如果我将代码更改为:

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

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

【问题讨论】:

    标签: jquery syntax autocomplete


    【解决方案1】:

    那是因为 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”放在同一行。

    【讨论】:

    • 谢谢。不知道。所以对于我的第一个问题,我假设代码返回一个具有 3 个属性的对象:数据、值和结果,对吧?
    • 是的,没错。传递给 map 方法的匿名函数返回一个具有 3 个属性的对象。
    【解决方案2】:

    JavaScript 有一些关于分号的语法规则会导致这样的事情。如果在一行的末尾可以放置一个分号,那么它就会被放置。这就是让您忘记将它们放在各种地方的原因。它也会导致这种事情,因为 return 可以单独使用。

    解析器看到这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 2018-01-11
      • 2011-05-27
      相关资源
      最近更新 更多