2013-04-17 1 views
0

У меня возникли проблемы с созданием виджета автозаполнения jQuery для меня. Я использую список пар ключ/значение с сервера.jquery-ui-autocomplete Как я могу установить идентификатор в текстовое поле, и он вернет мне текстовое значение

У меня есть следующие требования:

  1. Если пользователь установить идентификатор значения, как он Knowes код города и вместо внесения вводить название города, он поставил кодекс city-- Я хочу, чтобы автозаполнение поставило название города, и оно не дошло!
    Я редактирую мой код, теперь он работает!
    добавить это линии
    if (data.d.length == 1 && request.term.match(/\d+/g)) SetValue(textbox, hidden, data.d[0]); else

и функция
function SetValue(textbox, hidden, value){ textbox.focus().val(value.Text); hidden.val(value.Semel);}

  1. Другое дело, если один использует ту же страницу для создания и editting - на перезагрузки страницы, а editting, вам нужно воссоздать все промежутки и т. д. для значений, и я хочу отправить с сервера только код автозаполнения, а не текстовое значение, и я хочу, когда я установлю значение в текстовое поле, автозаполнение начнет работать и будет b звенеть значение с сервера
    Но с этим я до сих пор застрял:
    Я не знаю, как вызвать «автозаполнения» событие с послать значение (значение запроса)
    Вот мой 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(); 
    

    }

и вот мой 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); 

}

+0

Я редактировать мой вопрос – user1501754

ответ

0

Для вашего первого вопроса, то все зависит от логики вы пробовали, только в том случае, если у вас есть идентификатор для любой страны, то это не должно быть какой-либо трудно.

Второй запрос касается производительности страницы, это также не должно быть более жестким, если вы попробуете обновить элементы на основе шаблона поиска с помощью ajax, где вам нужно обновить только реальные элементы, сохраняя при этом остальную часть вашей Страница нетронутая.

см http://jquery.com/ для лучшего понимания тех же