jquery-ui-autocomplete如何将ID设置到textBox中,它将返回文本值

时间:2013-04-17 13:07:40

标签: c# jquery jquery-ui autocomplete jquery-autocomplete

我在使用jQuery的自动完成小部件时遇到了很多麻烦。我正在使用服务器中的键/值对列表。

我有以下要求:

  1. 如果用户设置了值的id,就像他知道城市的代码一样 并且键入城市名称的instad他把城市的代码 - 我希望自动完成将把城市的名称,它不应该!
    我编辑了我的代码,现在可以了!
    我添加了这一行
    if (data.d.length == 1 && request.term.match(/\d+/g)) SetValue(textbox, hidden, data.d[0]); else
  2. 和功能
    function SetValue(textbox, hidden, value){ textbox.focus().val(value.Text); hidden.val(value.Semel);}

    1. 另一件事是如果一个人使用相同的页面进行创建和编辑 - 在编辑时重新加载页面,你必须重新创建值的所有跨度等,我想从服务器发送只是自动完成的代码,而不是文本值,我希望当我将值设置到textBox时,autoComplete将开始工作并将从服务器带来值
      但是有了这个,我仍然陷入困境:
      我不知道如何通过发送值(请求值)触发“自动完成”事件
      这是我的C#代码:

      [WebMethod(EnableSession = true)]
      [ScriptMethod]
      public List<IEntityBase> FetchList(string Text, string Code, string Dspl, int NumRecordes, string TableName)
      {
          Text = Server.UrlDecode(Text);
          List<Tavla> tvListById = null;
          int ignored = 0;
      if (int.TryParse(Text, out ignored))
          tvListById = TvList.GetTvListById(TableName, ignored, Code, Dspl);if (tvListById != null && tvListById.Count != 0)
          return tvListById.Cast<IEntityBase>().ToList();
      
      var fetchShem = TvList.GetData(TableName, Code, Dspl)
      .Where(m => m.Shem.ToLower().Contains(Text.ToLower()))
      .Take(NumRecordes);
      return fetchShem.Cast<IEntityBase>().ToList();
      

      }

    2. 这是我的Jquery代码:

      enter code here
      
       textbox.autocomplete({
              source: function (request, response) {
                  $.ajax({
                      url: "AutoComplete.asmx/" + funcName,
                      data: "{ 'Text': '" + escape(request.term) + "','Code':'" + code + "','Dspl':'" + dspl + "','NumRecordes':'" + numrecordes + "','TableName':'" + tablename + "'}",
                      type: "POST",
                      contentType: "application/json; charset=utf-8",
                      dataFilter: function (data) { return data; },
                      success: function (data) {                      
                          if (data.d.length == 1 && request.term.match(/\d+/g))
                                  SetValue(textbox, hidden, data.d[0]);
                              else
                              response($.map(data.d, function (item) {
                                  return {
                                      label: item.Text,
                                      value: item.Semel
                                  }
                              }));
                          }
                      },
                      error: function (msg) { alert(msg); }
                  });
              },
              minLength: minLength,
              select: function (event, ui) {
                  var selectedObj = ui.item;
                  if (selectedObj) {
                      textbox.val(selectedObj.label);
                      hidden.val(selectedObj.value);
                  }       return false;   },
      
          });function SetValue(textbox, hidden, value) {
      textbox.focus().val(value.Text);
      hidden.val(value.Semel);
      

      }

1 个答案:

答案 0 :(得分:0)

对于你的第一个问题,这一切都取决于你所尝试的逻辑,以防万一你有任何国家的id,​​那么这不应该是困难的。

第二个查询是关于页面的性能的,如果你尝试使用ajax更新基于搜索模式的元素,这也不应该更难,你必须更新已经实现的元素,同时保留页面的其余部分完好无损。

请参阅http://jquery.com/以更好地理解相同的