2016-03-21 21 views
0

Bir kullanıcının konumunu seçmesini sağlamak için twitter typeahead'i uyguladı. Konumunu name yazıyor, ardından listeden seçiyor ve seçtiği konumun id formda yayınlanacağını belirtti.Twitter typeahead'de kimlik ile nasıl değer elde edilir?

Bu iyi çalışır, ve ben bu aşağıdaki liste var varsayalım:

[ 
    United States : 1, 
    Canada : 2, 
    England: 3, 
    China: 4, 
    India: 5, 
    .... // other locations 
] 

Şimdi bir kullanıcı kanada seçip formu göndermek, kimliği 2 veritabanına kaydedilir. Ancak kullanıcı aynı forma geri dönerse, seçtiği konumu almak için bir sorgu yaparım, bu durumda 2 kimliği döndürülecektir.

Seçtiği konumu görüntülemek için typeahead'de Kanada'yı otomatik olarak nasıl seçerim? Hiçbir id değerini temel bir metin değeri yerleştirmek için bir mekanizma inşa yoktur,

i

$('.typeahead').typeahead('val', value) //where value = 2 

çalıştı ama typeahead kontrolü "sadece" bir html girişi olduğundan bu

+0

i herhangi bir hata alamadım, ama bu sadece yerine typeahead içinde '2' koymak' – user2707590

+0

oluşturun canada' [keman] (https://jsfiddle.net/). – Vucko

+0

Burada yeni oluşturduğum bir js keman var. Küf, bir konum seçtiğinizde, kimlik alınır ve bu kimlik, form gönderildiğinde veritabanında saklanır. Şimdi kaydedilen verileri db'den almam ve yazım başında görmem gerekiyor. keman: https://jsfiddle.net/mu3cxv9w/ – user2707590

cevap

1

çalışmıyor . O kısmı kendin yapmak zorundasın.

I've created a fiddle to demonstrate.

Bunu gerçekleştirmek için farklı çeşitli yöntemler kullanabilir, ama benim uygulanmasında idare on focus kullanın. Bu durumda

.on('focus', function() { 
    if (defaultOption.length) { 
     var nm = $.map(locs, function(obj) { 
     if (obj.id === defaultOption) 
      return obj.name; // or return obj.name, whatever. 
     }); 
     console.log(nm); 
     $(this).data().ttTypeahead.input.trigger('queryChanged', nm); 
    } 
    }); 

, bir defaultValue (veritabanından ne geri geliyor olurdu) sağlanması ve ilk öğe olarak kaynağına ekleme ve sonra sorgu değiştiren olayı tetikleyen ediyorum.

Bunu işlemenin başka bir yolu, giriş kutusunda beklenen değeri önceden doldurmaktır. Bağlantılı kemanın sonunda bunu halledebilmen için bir yol gösterdim. Kod, varsayılan bir değeri kontrol eder ve daha sonra girdiyi doğru adla doldurur.

if (defaultOption.length) { 
    nm = $.map(locs, function(obj) { 
     if (obj.id === defaultOption) 
     return obj.name; // or return obj.name, whatever. 
    }); 
    } 

    $('.typeahead').val(nm); 
+0

Niçin loc'leri hardcode yaptınız? Sağlanan json api'yi kullanmamız gerekirse ne olur? ve bu bölüm hakkında daha fazla bilgi içeren bir belgeye yönlendirebilir misiniz? $ (This) .data(). TtTypeahead.input.trigger ('queryChanged', nm); '. Typeahead.js dokümantasyonundaki , 'queryChanged' olayının bile yoktur. – user2707590

+0

Api çağrısı kullanıyorum. Ancak, görüntülemek istediğiniz dize değerini döndürmediğiniz sürece, buna bakmak zorundasınız. Koda bakarsanız, metin kutusunda "Kanada" ı görüntülemek için varsayılan "2" yi "Kanada" adına eşleştirdiğimi göreceksiniz. – whipdancer

+0

bu satır '$ (this) .data() .ttTypeahead.input.trigger ('queryChanged', nm);' tam typeahead nesnesine ulaşmak için jQuery kullanarak bir kesmek. Arama sonuçlarına bir değer vermenizi sağlar. – whipdancer

İlgili konular