2013-04-06 21 views
9

Merhaba, jQuery UI otomatik tamamlama widget'ını çalışmaya çalışıyorum, böylece dizimin çoklu özniteliklerini eşleştirmesini sağlamaya çalışıyorum. varsayılan).Jquery UI Otomatik Tamamlama: bir dizinin birden çok niteliğinden arama

Örnekleriyle uğraştım, ancak bunu nasıl çözeceğime hala emin değilim.

http://jsfiddle.net/FUZPN/

Burada "ilk unsur benzer yazarsanız, otomatik tamamlamada açılır gerekir, Ne arayan kulüpler yazarsanız "yazma" olmasıdır script

var projects = [ 
    { 
     value: "jquery", 
     label: "jQuery", 
     desc: "the write less, do more, JavaScript library", 
     other: "9834275 9847598023 753425828975340 82974598823" 
    }, 
    { 
     value: "jquery-ui", 
     label: "jQuery UI", 
     desc: "the official user interface library for jQuery", 
     other: "98 83475 9358 949078 8 40287089754 345 2345" 
    }, 
    { 
     value: "sizzlejs", 
     label: "Sizzle JS", 
     desc: "a pure-JavaScript CSS selector engine", 
     other: "49857 2389442 573489057 89024375 928037890" 
    } 

benim dizi biçimdir jq "ilk 2 öğe açılmalıdır. documentation göre


:

Dizi: bir dizi yerel veri için kullanılabilir. dizeleri

  • Bir dizi: desteklenen iki biçimi vardır [ "Choice1", "Choice2" ]

  • etiket ve değer özellikleri olan nesneler dizisi: etiket mülkiyet görüntülenir [ { label: "Choice1", value: "value1" }, ... ]

öneri menüsü. Bir kullanıcı bir öğe seçtiğinde, değeri değeri giriş elemanına eklenir. Yalnızca bir özellik belirtilirse, hem yalnızca değeri özellikleri sağlarsanız, değerietiketi etiketi olarak kullanılacaktır.

nasıl (sert) kodu o kadar kaynak yerine bir etiketin ait 2 etiketleri (label ve desc?) Kullanan do?


(o Üzgünüm birçok benzer soruları aradık, ancak hepsi .. Ben sadece 1 dizi beri burada değil ki, birden fazla kaynaktan nişan mi?)

cevap

10

Otomatik Tamamlama kabul bir third type of source Verilere herhangi bir şekilde sağlayabilen bir fonksiyon, uygun gördüğünüz:

üçüncü varyasyon, bir geri çağırma, en fazla esnekliği sağlar ve Otomatik tamamlamada herhangi bir veri kaynağını bağlamak için kullanılabilir. Metin girişi şu anda değeri belirtir tek terimi özelliği ile,

  • bir istek nesnesi: geri arama iki bağımsız değişkeni alır.Örneğin, kullanıcı bir şehir alanına "yeni yo" girerse, Otomatik Tamamlama terimi "yeni yo" ifadesine eşit olur.
  • Tek bir argüman bekler: kullanıcıya önerilecek veriler. Bu veriler, sağlanan temel alınarak filtrelenmelidir ve basit yerel veriler için yukarıda açıklanan biçimlerden birinde olabilir. İstek sırasında hataları işlemek için özel bir kaynak geri çağırma sağladığında önemlidir. Bir hatayla karşılaşsanız bile her zaman yanıtı geri çağırmalısınız. Bu, ürününün her zaman doğru duruma sahip olmasını sağlar.

Bu, sorunun bu

$("#project").autocomplete({ 
    source: function (request, response) { 
     // request.term is what you typed 
     console.log(request.term); 

     //call response with an array containing the filtered data 
     response([...]); 
    } 
}); 

basit bir çözüm gibi bir şey yazabilirsiniz anlamına gelir:

function lightwell(request, response) { 
    function hasMatch(s) { 
     return s.toLowerCase().indexOf(request.term.toLowerCase())!==-1; 
    } 
    var i, l, obj, matches = []; 

    if (request.term==="") { 
     response([]); 
     return; 
    } 

    for (i = 0, l = projects.length; i<l; i++) { 
     obj = projects[i]; 
     if (hasMatch(obj.label) || hasMatch(obj.desc)) { 
      matches.push(obj); 
     } 
    } 
    response(matches); 
} 

$("#project").autocomplete({ 
    source: lightwell 
}); 

Ve Keman http://jsfiddle.net/FUZPN/5/

+0

büyük tepki! – user3032973

+0

Yukarıdaki büyük cevaba dayanan, biraz daha fazla açıklamaya ihtiyaç duyanlar için benzer ve yüksek oranda yorumlanmış bir cevap: https://stackoverflow.com/a/44587413/1063287 – user1063287

İlgili konular