2012-02-29 18 views
48

Sono nuovo nel framework di Bootstrap su Twitter e ho bisogno di utilizzare bootstrap-typeahead.js per il completamento automatico, ma devo anche ottenere il valore selezionato dall'utente per il typeahead.bootstrap-typeahead.js aggiungi un ascoltatore sull'evento selezionato

Questo è il mio codice:

<input type="text" class="span3" style="margin: 0 auto;" 
        data-provide="typeahead" data- items="4" 
        data-source='["Alabama","Alaska"]'> 

Come posso aggiungere un listener per ottenere il valore selezionato dal tipo typeahead e passarlo in una funzione? Per esempio quando uso ExtJS, applico questa struttura:

listeners: { 
    select: function(value){ 
    ........ 
    } 
} 

Come posso fare qualcosa di simile con un typeahead?

risposta

0

Prova this fork of typeahead. Ti dà un evento onselect, popolazione asincrona e altro!

+1

typeahead ha ora 'afterSelect', vedi la mia risposta –

165

si dovrebbe usare "aggiornamento":

$('#search-box').typeahead({ 

    source: ["foo", "bar"], 

    updater:function (item) { 

     //item = selected item 
     //do your stuff. 

     //dont forget to return the item to reflect them into input 
     return item; 
    } 
}); 
+1

Perché questo è classificato -1? Ho provato molte forchette di typehead e niente ha funzionato. Questa soluzione ha funzionato subito ... – gpasse

+7

Questa è una risposta corretta.Chiedo perché non è documentato nei documenti di Bootstrap di Twitter. –

+2

sì, funziona con la versione 2.1. – egis

4

Sono stato in grado di ottenere questo lavoro semplicemente guardando l'evento 'cambiamento' sull'elemento, che spara Twitter Bootstrap typeahead su Seleziona.

var onChange = function(event) { 
    console.log "Changed: " + event.target.value 
}; 

$('input.typeahead').typeahead({ source: ['test1', 'test2'] }); 
$('input.typeahead').on('change', onChange); 

Uscite "Modificate: test1" quando l'utente seleziona test1.

NOTA: L'evento viene attivato anche quando l'utente preme "Invio" anche se non viene trovata alcuna corrispondenza, quindi è necessario decidere se è quello che si desidera. Soprattutto, se l'utente inserisce "te" e quindi fa clic su "test1", verrà visualizzato un evento per "te" e un evento per "test1", che è possibile che si desideri eseguire il rimbalzo.

(versione 2.0.2 Twitter Bootstrap typeahead)

51

In v3 Twitter typeahead bootstrap sarà caduto un sostituito con il cinguettio typeahead (che ha la funzione che si vuole e molto di più)

https://github.com/twitter/typeahead.js

utilizzo in questo modo:

jQuery('#autocomplete-input').on('typeahead:selected', function (e, datum) { 
    console.log(datum); 
}); 
+0

ma come si usa typeahead: selezionato? – adamnyberg

+3

questo aggiornamento aiuta? –

+3

Suggerisco di usare '.on ('typeahead: typeahead selezionato: autocompleted' ...' per acquisire anche il completamento automatico quando un utente preme il tasto tab, come menzionato nella risposta di @ philippinedev sotto. –

17

Grazie P.scheit per la risposta. Consentitemi di aggiungere questo alla vostra soluzione che gestisce il completamento automatico quando l'utente preme il tasto Tab.

jQuery('#autocomplete-input').on('typeahead:selected', function (e, datum) { 
    console.log(datum); 
}).on('typeahead:autocompleted', function (e, datum) { 
    console.log(datum); 
}); 
+0

Non penso che sia necessario funzioni ho dato una versione modificata qui sotto, grazie per l'input iniziale .. – Abs

0
$('input.typeahead').typeahead({ 
    source: ['test1', 'test2'], 
    itemSelected: function(e){ 
     ---your code here--- 
    } 
}); 
+0

Spiega il tuo codice –

+0

// Twitter Bootstrap Typeahead Plugin // v1.2.2 // https://github.com/tcrosen/twitter-bootstrap -typeahead –

15

è possibile utilizzare afterSelect

$('#someinput').typeahead({ 
    source: ['test1', 'test2'], 
    afterSelect: function (item) { 
     // do what is needed with item 
     //and then, for example ,focus on some other control 
     $("#someelementID").focus(); 
    } 
}); 
+1

Grazie amico! Ha funzionato perfettamente. – brunoramonalmeida

1

Heres la soluzione con il multi-evento per schede e selezionati:

$('#remote .typeahead').on(
    { 
     'typeahead:selected': function(e, datum) { 
      console.log(datum); 
      console.log('selected'); 
     }, 
     'typeahead:autocompleted': function(e, datum) { 
      console.log(datum); 
      console.log('tabbed'); 
     } 
}); 
Problemi correlati