2012-06-08 2 views
6

jQuery-autocomplete plugin을 사용하여 서버에 대한 AJAX 호출을 사용하여 입력 문자열의 완성을 제안합니다. 또한 서버는 결과를 원하는 순서대로 반환하지만 자동 완료는 다른 순서로 결과를 표시합니다.jQuery 자동 완성 결과 순서

jQuery 자동 완성을 구성하여 출력 순서를 변경하지 못하게하려면 어떻게해야합니까? 데이터가 이미 필요에 따라 정렬/정렬되었으므로 클라이언트 측에서 어떤 종류의 처리도 필요하지 않습니다.

+0

"자동 완성으로 다른 순서로 표시"하시겠습니까? – Shyju

+0

즉, 드롭 다운에 표시되는 문자열의 순서가 서버에서 반환 한 문자열의 순서와 다르다는 것을 의미합니다 (설명서에 지정된대로 "\ n"로 구분 된 문자열). – rajatkhanduja

답변

8

음, 생각보다 간단 밝혀졌다. 필자는 플러그인의 코드를 읽고 내 출력을 정렬하는 코드를 주석 처리하여 수정했습니다.

내가 'sortResults : true'변수를 발견했을 때입니다. 그래서 필요한 것은 변수를 false로 설정하는 것입니다. 나는이 문서에서 찾지 못했습니다.

$('#search').autocomplete ({ url: "index.php", sortResults: false })

이제 출력은 내가 필요로하는 정확한 순서입니다. jQuery "Autocomplete" plugin is messing up the order of my data 을 (즉, 같은 플러그인 없음)

감사 :

는 여기에서 문제를 해결/찾을 수있는 코드를 읽기의 아이디어를 얻었다. :)

+0

좋습니다! 자신의 대답을 수락하는 것을 잊지 마십시오 :) –

+0

48 시간 후에 반드시 그렇게 할 것입니다. – rajatkhanduja

+0

클라이언트 쪽보다 서버에서 미리 처리 된 결과를 훨씬 쉽게 표시 할 수 있습니다. +1 – Andreas

18

자동 완성으로 보내기 전에 서버 결과를 정렬하기 만하면됩니다. 당신이 $return_arr

sort() 기능을 사용 echo json_encode($return_arr); 전에

그래서 당신이 뭔가를 시도 할 수 있습니다 : 논리 용어로 시작하는 일치의 배열을 구축하는 것입니다

다음 그 단어를 포함하는 일치하지만 그 단어로 시작하지 말라.

$(document).ready(function() { 
    var source = ['Adam', 'Benjamin', 'Matt', 'Michael', 'Sam', 'Tim']; 
    $("input").autocomplete({ 
     source: function (request, response) { 
      var term = $.ui.autocomplete.escapeRegex(request.term) 
       , startsWithMatcher = new RegExp("^" + term, "i") 
       , startsWith = $.grep(source, function(value) { 
        return startsWithMatcher.test(value.label || value.value || value); 
       }) 
       , containsMatcher = new RegExp(term, "i") 
       , contains = $.grep(source, function (value) { 
        return $.inArray(value, startsWith) < 0 && 
         containsMatcher.test(value.label || value.value || value); 
       }); 

      response(startsWith.concat(contains)); 
     } 
    }); 
}); 

예 :http://jsfiddle.net/zkVrs/

출처 :https://stackoverflow.com/a/8302996/973155

+1

'서버가 결과를 원하는 순서대로 반환하지만 자동 완성은 다른 순서로 결과를 표시합니다. 'OP가 이미 이것을 수행하고있는 것처럼 들립니다. – Dennis

+0

http://stackoverflow.com/a/8302996/277923 위의 링크에서이 내용을 읽었지만 이것을 사용하여 어떻게 '정렬 없음'을 수행 할 수 있는지 짐작할 수 없습니다.jQuery-autocomplete를 사용하여 ajax 호출에 의해 반환 된 순서대로 결과를 표시하고 싶습니다. – rajatkhanduja

+1

코드를 공유하십시오. –

1

jQuery 자동 완성 플러그인의 현재 빌드에는 sortResults 옵션이 없으므로이 문제에 대한 다른 해결책을 찾아야하고 플러그인이 결과를 정렬하는 유일한 이유는 서버 응답이 정상이 아닌 경우마다 정규화된다는 것입니다. 객체가있는 순수한 배열 {label : ..., value : ...}.

PHP를 사용 언어로 생각하면 json_encode (array_values ​​($ your_array)); 트릭을해야합니다.

+0

Thanks @sKopheK! 명확히하기 위해 소스 함수의 응답 매개 변수에 다음을 제공하십시오 :'[{label : "suggestion", value : "suggestion"},]'- not this :'[ "suggestion",]' – joeymink