2013-04-17 3 views
0

나를 위해 jQuery의 자동 완성 위젯을 만드는 데 많은 문제가 있습니다. 서버에서 키/값 쌍 목록을 사용하고 있습니다. jquery-ui-autocomplete ID를 텍스트 상자에 설정하면 텍스트 값이 반환됩니다.

I가 다음과 같은 요구 사항 : 그 도시 과 도시의 이름을 입력하는 instad의 코드를 knowes처럼 사용자가 값의 ID를 설정 그가의 코드를 삽입
  1. 경우

    도시 - 나는 자동 완성이 도시의 이름을두기를 바란다. 그리고 그것은 dosn't하다!!
    내 코드를 편집합니다. 이제 작동합니다!
    내가이 라인
    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에있는 동안 페이지를 다시로드에, 값에 대한 모든 범위 등을 다시 작성해야하며 텍스트 값이 아닌 자동 완성 코드 만 서버에서 보내려고합니다. 그리고 textBox에 값을 설정하면 autoComplete가 시작됩니다. 일과 의지 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와 코드입니다 :

당신이 다음이 어떤 어려운 야해 모든 국가에 대한 ID가있을 경우
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

는, 모두는 경우에, 당신은 시도 논리를 따라 달라집니다.

두 번째 쿼리는 모두 페이지의 성능에 관한 것입니다. 아약스를 사용하여 검색 패턴을 기반으로 요소를 업데이트하려고하면 페이지의 성능에 대한 두 번째 쿼리를 수행 할 수 없습니다. 나머지는 그대로두고 요소를 업데이트해야합니다. 페이지가 그대로 유지됩니다.

더 나은 이해를 위해 을 참조하십시오.

관련 문제