2012-06-08 133 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

簡單地將服務器結果發送到自動完成之前應該對其進行排序。

所以,如果你echo json_encode($return_arr);使用上$return_arr

sort()功能,您也可以嘗試這樣的事:

的邏輯是建立一個匹配的數組與術語開始,然後將其與包含該術語但不以它開頭的匹配連接起來。

$(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

'服務器發生在我希望他們出現的順序返回的結果護理,但自動完成顯示他們在不同的order.'這聽起來像OP已經在這樣做。 – Dennis

+0

http://stackoverflow.com/a/8302996/277923 我從上面的鏈接閱讀了這個,但我無法理解,我怎麼能用這個來做'沒有排序'。我希望jQuery-autocomplete以ajax調用返回的順序顯示結果。 – rajatkhanduja

+1

分享您的代碼。 –

1

由於在當前版本的jQuery Autocomplete插件中沒有sortResults選項,我必須搜索另一個解決方案來解決這個問題,並發現插件排序結果的唯一原因是服務器響應每當它不是一個標準化帶有對象的純數組{label:...,value:...}。考慮將PHP作爲您使用的語言,json_encode(array_values($ your_array));應該做的伎倆。

+0

謝謝@sKopheK!只是澄清,提供這個源函數的響應參數:'[{標籤:「建議」,值:「建議」},]' - 不是這樣:'[「建議」,]' – joeymink