5

Sto usando typeahead bootstrap per la ricerca in questo modo:Bootstrap typeahead: mostra il testo diverso in confezione una volta selezionato

$('.lookup').typeahead({ 

source: function (query, process) { 
    return $.getJSON(
     'json_autocomplete.php',{ query: query }, 
     function (data) { 

      var newData = []; 
       $.each(data, function(){ 

        newData.push(this.label); 
        //populate hidden field with id 
        $('#contact_id').val(this.id); 

       }); 

      return process(newData); 

     }); 
} 

}); 

I dati JSON è simile al seguente:

[{"label":"Contact: Jeff Busch-> Busch, Jeff: 1975-11-24","value":"Busch, Jeff","id":"2096"}, ... 

Si sta lavorando molto. Quando l'utente inizia a digitare i dati "etichetta" viene visualizzato in un elenco sotto l'input. TUTTAVIA, una volta che l'utente fa clic su uno degli elementi dell'elenco, voglio che il testo "valore" appaia nella casella di testo di input, non tutte le informazioni sull'etichetta che sono state cercate!

È possibile?

Ecco un violino:

http://jsfiddle.net/michels287/qdgo651h/

+0

cosa fa il tuo html assomiglia? È questa l'unica sceneggiatura? Forse un jsfiddle? – whipdancer

+0

Mi scuso. Ho creato un violino per dimostrare. Mi piace il modo in cui le informazioni 'etichetta' sono mostrate nel downdown come funziona typeahead, ma una volta selezionato un elemento mi piacerebbe avere solo le informazioni 'valore' da mostrare nell'input. Ho aggiornato la mia domanda originale con un violino che spero possa essere d'aiuto. –

risposta

8

io vi consiglio vivamente l'aggiornamento a https://github.com/bassjobsen/Bootstrap-3-Typeahead E 'l'esatto stessa buona typeahead bootstrap 2.x vecchio, appena tenuto e bugfixed nel proprio repository poiché bootstrap 3.0 ha saltato il typeahead in favore di typeahead.js (che BTW non è più mantenuto affatto). Questo renderà la vita molto più facile per te.

Dopo di che è possibile saltare tutte le contorsioni e semplicemente fare questo:

$('#contact').typeahead({ 
    source: jsonData, 
    displayText: function(item) { 
    return item.label 
    }, 
    afterSelect: function(item) { 
    this.$element[0].value = item.value 
    } 
}) 

aggiornato violino ->http://jsfiddle.net/qdgo651h/1/


Aggiornato ogni commento. Credo che complicare la source parte

$('.lookup').typeahead({ 
    displayText: function(item) { 
     return item.label 
    }, 
    afterSelect: function(item) { 
     this.$element[0].value = item.value 
    }, 
    source: function (query, process) { 
    return $.getJSON('json_autocomplete.php', { query: query }, function(data) { 
     process(data) 
    }) 
    } 
}) 

dovrebbe farlo. Aggiornato il violino dal commento qui sotto ->http://jsfiddle.net/hwbnhbdd/1/ È possibile utilizzare http://myjson.com/ come sorgente AJAX in violini come nell'aggiornamento.

+0

Grazie. Sto cercando di adattare il tuo codice al mio progetto. Ho fatto quel violino come esempio. Tuttavia, sto remotamente ricevendo i miei dati per il mio typeahead con AJAX e restituendo le informazioni come JSON. Non so come replicare questo in violino con Ajax, ma ti sto mostrando in questo nuovo violino il codice che sto usando. Se la si guarda, si supponga che i dati JSON nella parte superiore siano ciò che la chiamata ajax sta restituendo. Ho anche aggiornato i riferimenti a typsteadhead di bootstrap 3 secondo la tua richiesta. Come posso ottenere la stessa cosa con la mia richiesta di ajax? http://jsfiddle.net/michels287/hwbnhbdd/ –

+0

@ chris.cavage, OK - vedi aggiornamento. – davidkonrad

+1

Sì, l'ho complicato eccessivamente! Che aiuto! Grazie mille! –

0

Basta restituire i dati sull'evento di aggiornamento in questo modo:

updater: function (item) { 
     $('#id').val(map[item].id); 

     //Here we return the text to display on the input control 
     return map[item].autocomplete; 
    },