【问题标题】:Adding array as a source to jQuery autocomplete将数组作为源添加到 jQuery 自动完成
【发布时间】:2012-05-18 06:49:54
【问题描述】:

我需要从将数组传递到自动完成源的 Web 服务提供我的自动完成功能。

这是我的网络服务:

    public Filter[] getAutoComplete(string column)
    {
        List<Filter> list = new List<Filter>();

        DbAccess dbacc = new DbAccess();

          DataTable dt = dbacc.getColumnHeader(column);

          Filter _Filter = new Filter();


          if (column == "member_id")
          {
              foreach (DataRow row in dt.Rows)
              {
                  _Filter.memid = row["member_id"].ToString();
              }
          }
          else if (column == "lname")
          {
              foreach (DataRow row in dt.Rows)
              {
                  _Filter.memid = row["lname"].ToString();
              }
          }
          else if (column == "mname")
          {
              foreach (DataRow row in dt.Rows)
              {
                  _Filter.memid = row["mname"].ToString();
              }
          }
          else if (column == "fname")
          {
              foreach (DataRow row in dt.Rows)
              {
                  _Filter.memid = row["fname"].ToString();
              }
          }

        list.Add(_Filter);

        return list.ToArray();
    }

这是我的 jquery ajax:

$.ajax({

    url: "webservices/wbFilters.asmx/getAutoComplete",
    data: json,
    type: "POST",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function (mydata) {

        $("#tags").autocomplete({
            source: mydata
        });

    }
});

我可以验证我的列表数组是否有值。我只是无法将它附加到我的自动完成功能。我读到我可以添加一个数组作为源,但我真的无法让它工作。

有人可以解释一下需要做些什么才能使其正常工作吗?

【问题讨论】:

    标签: jquery asp.net autocomplete


    【解决方案1】:

    对于包含多个字符串列表的自定义数据源,您需要指定要显示的一个或多个属性。因此,您需要覆盖 _renderItem,如下所示:

    $("#tags").autocomplete({
        source: myData
    }).data("autocomplete")._renderItem = function(ul, item) {
        return $( "<li></li>" )
                .data( "item.autocomplete", item )
                .append( "<a>" + item.memid + "</a>" )
                .appendTo( ul );
    };
    

    详情请见:http://jqueryui.com/demos/autocomplete/#custom-data

    【讨论】:

    • 现在有东西了。但它是未定义的。
    • 也许您需要将我的答案与 Dappergoat 的答案结合起来并使用 myData.d。
    • 我确实做到了。现在还在工作。我得到了不确定的结果。
    • 那么你应该尝试调试myDataitem中的是什么。
    • 我终于让它工作了。谢谢你们。还有一个问题。输入第二个字符后,自动完成隐藏。我应该设置一个长度或其他东西来改变它吗?
    【解决方案2】:

    您是否尝试过将 Success 函数更改为:

     success: function (mydata) {
    
            $("#tags").autocomplete({
                source: mydata.d
            });
    
        }
    

    根据我的经验,.net 将 json 对象包装在一个名为“d”的参数中

    【讨论】:

    • 您是否尝试过将其与 Jeroens 的答案结合使用?我最近做了一个这样的自动完成功能
    【解决方案3】:

    这对我很有用,它遵循 jquery 的 api。

    $("#Dialogs_ProjectID").autocomplete({
        source: function (request, response) {
            $.ajax({
                type: "POST",
                url: "Log.aspx/jQuery_Get_Autocomplete",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify({
                    columnName: "Project",
                    startsWith: request.term
                }),
                success: function (data) {
                    response($.map(data.d, function (item) {
                        return {
                            value: item
                        }
                    }));
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(errorThrown);
                }
            });
        }
    
    });
    

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 2012-05-12
      • 2013-06-22
      • 1970-01-01
      相关资源
      最近更新 更多