2012-11-26 14 views
12

Sto cercando un modo per cambiare source per typeahed.bootstrap typeahead - changing source

Ad esempio, supponiamo di avere i seguenti 2 elenchi e, a seconda del caso, mi piacerebbe che il typeahead funzionasse con una fonte diversa.

var list1 = ["this", "is", "first", "list"], 
    list2 = ["second", "list", "comes", "here"]; 

$("selector").typeahead({source: list1}) 

Poi, quando faccio

$("selector").typeahead({source: list2}) 

e iniziare a digitare nella casella di input, il primo elenco compare sotto la nuova.

ho provato a fare

$("selector") 
    .removeData() 
    .typeahead({source: list2}) 

Eppure, non ha alcun effetto.

+1

possibile duplicato di [Come aggiornare l'opzione source in bootstrap-typeahead.js] (http: // StackOverflow .com/questions/13516396/how-to-update-the-source-option-in-bootstrap-typeahead-js) –

risposta

22

è necessario aggiornare il campo di dati associati, come indicato here:

$("selector").data('typeahead').source = list2; 
+0

che è corretto, appena trovato questo https://github.com/twitter/bootstrap/issues/ 1997 # issuecomment-4011687 –

+0

Sì, è lo stesso link che ho trovato :) –

+10

Sto ottenendo Impossibile impostare la proprietà 'origine' di undefined –

1

Purtroppo, la risposta accettata non ha funzionato per me. Potrebbe essere un problema con le versioni più recenti della libreria. Per me, i dati ('typeahead') non sono definiti - invece ci sono dati ('ttTypeahead') e dati ('ttAttrs'). Nessuno di questi ha un attributo di origine.

Dopo un po 'la lettura del codice sono arrivato fino a questo: $('selector').data('ttTypeahead').dropdown.datasets[0].source = mySourceFunction

E sembra funzionare. Potrebbero tuttavia esserci casi in cui è definito più di un set di dati.

+1

Questo non funziona in Twitter typeahead 0.11.1 – user1279887

5

Nessuna di queste risposte ha funzionato per me quando si utilizza la libreria Bootstrap-3-Typeahead. Sono stato in grado di aggiornare la fonte da distruggere la typeahead inizializzato e ri inizializzandolo con una nuova fonte:

$(".typeahead").typeahead("destroy"); 
    $(".typeahead").typeahead({ source: result }); 
+0

Sfortunatamente, questo ha anche l'effetto di distruggere gli eventi o n quell'elemento ... – skirato

+0

Giusto, dovresti applicarli insieme all'origine –

+0

Assicurati di non associare manualmente alcun gestore di eventi che stai utilizzando (ad es. 'typeahead: close') quando chiamate il metodo 'destroy'. Questo metodo non separa questi gestori, quindi continueranno ad accodare e degradare le prestazioni ogni volta che distruggi e ricostruisci. – Joel

Problemi correlati