2009-09-28 5 views
0

내가 jQuery를의 비트와 함께 작은 문제에 봉착 :jQuery 조기 바인딩 기능 가능?

function getQuickResults(terms) 
{ 
    var url = '/Search/PreviewSearch'; 

    $.ajax({ 
     type: "POST", 
     url: url, 
     data: { terms: terms }, 
     dataType: "json", 
     error: function(xhr, status, error) { 
      alert(error); 
     }, 
     success: function(json) { 

      $("#quickSearchResults").empty(); 

      for (var i = 0; i < json.length; i++) { 
       var title = json[i].Title; 

       $("#quickSearchResults").append($("<span class='quickSearchResult' />")) 
             .children(":last") 
             .append(json[i].Title) 
             .append("<br />"); 
      } 

      $("#quickSearchResults").children(":last").css({ 'border-bottom': 'none' }); 

      if (json.length > 0) { 
       $("#quickSearchResults").show(); 
      } 
      else { 
       $("#quickSearchResults").hide(); 
      } 
     } 
    }); 
} 

하는 것은 기본적으로 이것은 입력 힌트 시스템 내 아약스 기능입니다. 키 업에서는 검색을 위해 아약스 요청을 보내고 값의 작은 드롭 다운을 반환합니다.

사용자가 결과에서 범위 중 하나를 클릭하면 해당 범위를 텍스트 상자에 복사합니다. 그래서 이것을 시도 :

 $("#quickSearchResults").append($("<span class='quickSearchResult' />")) 
           .children(":last") 
           .append(json[i].Title) 
           .append("<br />") 
           .click(function(evt) { 
            $("#searchBox").val(json[i].Title);  
           }); 

하지만이 작동하지 않습니다. 나는 json [i].에 변수를 할당하려고 시도했다. 대신 제목을 붙이고 사용했지만, 항상 마지막 결과의 제목을 반환하는 것처럼 보인다. 아마도 바인딩 문제라고 생각하고 있지만 주위에 방법이 있는지 모르겠습니다. i 대신 마지막 값에 의존하는 기능에 저장 바인딩 있도록 함수를 호출 할 필요가

답변

2

왜 바퀴를 재발 명합니까? 어떻게 어떤 방법으로 내가 jQuery를 전문가가 아니에요

+0

와우. 이것은 내가 찾고있는 것입니다! 이것을 지적 해 주셔서 감사합니다. – James

2
for (var i = 0; i < json.length; i++) { 
    (function(i){ 
    var title = json[i].Title; 

    $("#quickSearchResults").append($("<span class='quickSearchResult' />")) 
          .children(":last") 
          .append(json[i].Title) 
          .append("<br />"); 
    })(i); 
} 

는이 같은 뭔가 폐쇄를 만드는 일을해야한다고 생각 . 그렇지 않으면 알려주세요.

1

을 무엇을하려고 할의로 확실히 당신에게 통찰력을 줄 것이다하지 않으면 jQuery를 Autocomplete, 당신의 목적을

에 딱 맞는 그것을처럼 보이지만 이 일이 좋을까요?

function setSearchBox() 
{ 
    $("#searchBox").val($(this).data("title")) 
} 

다음 AJAX 응답에 ...

$("#quickSearchResults").append($("<span class='quickSearchResult' />")) 
         .children(":last") 
         .append(json[i].Title) 
         .append("<br />") 
         .data("title",json[i].Title) 
         .click(setSearchBox);