2012-06-08 32 views
6

Bir sunucuya AJAX çağrısı kullanarak giriş dizesinin tamamlanması için öneriler almak üzere jQuery-autocomplete plugin kullanıyorum. Ayrıca, sunucu, sonuçların görüntülenmesini istediğim sıraya döndürme ile ilgilenir, ancak otomatik tamamlama bunları farklı bir sırada gösterir.jQuery Otomatik tamamlama sonuçları sonuçları

jQuery otomatik tamamlamasını çıktıyı yeniden sıralamak için nasıl yapılandırabilirim? Verilerin daha önce gerektiği gibi sıralandığı/sıralandığı için, müşterinin sonuna herhangi bir işlem yapılmasını istemiyorum.

+0

"Otomatik tamamlama onları farklı bir sırada gösterir" ile ne demek istiyorsun? – Shyju

+0

Açılır listede görüntülenen dizelerin sırasının, sunucu tarafından döndürülenlerden farklı olduğu (bu, belgelerde verildiği gibi, "\ n" karakter dizisi dizisinin bir dizisidir). – rajatkhanduja

cevap

8

Eh, düşündüğümden daha basit olduğu ortaya çıktı. Eklentinin kodunu okumaya karar verdim ve çıktımı sıralayan kodu yorumlayarak değiştirdim.

Varsayılan olarak 'sortResults: true' değişkenini varsayılan olarak buldum. Yani, ihtiyacım olan tek şey bu değişkeni yanlış yapmaktı. Bunu belgelerde bulamadım.

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

Şimdi çıkış ı gerektirir kesin sırada bulunuyor. jQuery "Autocomplete" plugin is messing up the order of my data (Aynı eklenti değildir)

Teşekkür:

buradan sorunu çözmek/bulmak için kod okuma fikri var. :)

+0

Harika! Kendi cevabınızı kabul etmeyi unutmayın :) –

+0

Elbette bunu 48 saat sonra yapacağız. – rajatkhanduja

+0

Daha önce olduğu gibi, daha önce işlenmiş sonucu sunucudan istemci tarafında yapmaktan çok daha kolay. +1 – Andreas

18

Sunucu sonuçlarını otomatik tamamlamaya göndermeden önce basitçe yapmanız gerekir. Eğer $return_arr

üzerinde sort() işlevini kullanın echo json_encode($return_arr); önce

Yani Ayrıca böyle bir şey deneyebilirsiniz: mantık terimle başlar maçların bir dizi oluşturmaktır

ve sonra terimini içeren ancak bununla başlamayan eşleşmelerle birleştirin.

$(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)); 
     } 
    }); 
}); 

Örnek:http://jsfiddle.net/zkVrs/

Kaynak:https://stackoverflow.com/a/8302996/973155

+1

'sunucu, sonuçların görünmesini istediğim sıraya göre döndürür ancak otomatik tamamlama bunları farklı bir sırada gösterir. 'OP zaten bunu yapıyor gibi görünüyor. – Dennis

+0

http://stackoverflow.com/a/8302996/277923 Bunu yukarıdaki bağlantıdan okudum, ancak bunu "sıralama yok" yapmak için nasıl kullanabilirim?JQuery-autocomplete öğesinin ajax çağrısı tarafından döndürülen siparişte gösterilmesini isterim. – rajatkhanduja

+1

Kodunuzu paylaşın. –

1

jQuery Autocomplete eklentisinin mevcut yapısında sortResults seçenekleri bulunmadığından, bu soruna başka bir çözüm aramak zorunda kaldım ve eklentinin sıralamasının tek sebebi, sunucu yanıtının her seferinde olmadığı zaman normalleştiriliyor olmasıdır. nesnelerle saf dizi {label: ..., value: ...}.

PHP'yi kullanım diliniz olarak düşünürseniz, json_encode (array_values ​​($ your_array)); hile yapmalıdır.

+0

Teşekkür ederiz @sKopheK! Sadece açıklığa kavuşturmak için, bunu kaynak fonksiyonunun yanıt parametresine verin: '[{label:" suggestion ", value:" suggestion "},]' - not this: '['suggestion',]' – joeymink

İlgili konular