2012-12-26 12 views
6

Ciao Sto usando typeahead in twitter bootstrap. Quello che ho trovato qui è che nel menu a discesa di completamento automatico, seleziona la prima opzione per impostazione predefinita. Il mio requisito è che inizialmente non dovrebbe essere selezionato nulla, va alla prima opzione solo quando premo il tasto di navigazione (su o giù) o quando passo il mouse su di esso. È possibile utilizzare typeahead.Bootstrap Typeahead: rimuove la selezione forzata del primo elemento

+0

Hai provato a utilizzare l'opzione evidenziatore con un valore di -1? – Tkingovr

+0

no ci proverò, fammi controllare. –

+0

@Tkingovr mi spiace che non funzioni, e l'evidenziatore è una funzione, come può avere valore. –

risposta

2

C'è il più potente typeahead project da Twitter che non ha questo problema. Non capisco perché questo progetto non sia incluso direttamente in Twitter Bootstrap.

È possibile vedere here some examples.

+1

https://github.com/twitter/bootstrap/issues/7384 ecco perché – Jorge

+0

http://angulartutorial.blogspot.in/2014/05/auto-complete-in-angular-js.html – Prashobh

+0

https: // typeahead .js.org/esempi/è il codice più recente/gestito, il cui nome di battuta è stato cancellato dal tipype di Twitter che non è stato mantenuto negli anni. – Artistan

1

Anche se non esattamente quello che si chiede, c'è una soluzione alternativa here. Fondamentalmente, si effettua il testo che viene inserito dall'utente nel primo suggerimento typeahead. Come cita la risposta collegata, questo è lo stesso comportamento che si ottiene dalla barra degli indirizzi di Chrome.

+0

sì, ci ho pensato, ma non è corretto. –

+0

Grazie per questo suggerimento. Sono d'accordo che non risponda alla domanda esatta ma è stata la soluzione migliore per me –

+0

@DerekWhite Come hai risolto questo problema? Dov'è un esempio? Grazie! – hyperrjas

2

È possibile sovrascrivere il metodo di rendering typeahead bootstrap per ottenere ciò. La linea items.first().addClass('active') dal plug-in originale typeahead verrà rimossa in questa sostituzione.

$.fn.typeahead.Constructor.prototype.render = function(items) { 
    var that = this 

    items = $(items).map(function (i, item) { 
     i = $(that.options.item).attr('data-value', item) 
     i.find('a').html(that.highlighter(item)) 
     return i[0] 
    }) 

    this.$menu.html(items) 
    return this 
}; 
0

1-Aperte bootstrap-typeahead.js e commentare items.first(). AddClass ('attivo')

render: function (items) { 
    var that = this 

    items = $(items).map(function (i, item) { 
    i = $(that.options.item).attr('data-value', item) 
    i.find('a').html(that.highlighter(item)) 
    return i[0] 
    }) 

// items.first().addClass('active') 
    this.$menu.html(items) 
    return this 
} 
4

per evitare di selezione prima opzione typeahead di default, I parametro utilizzato in documenti ufficiali: autoSelect. Di default è impostato su 'true'

Il mio codice:

$('#searchString', this.el).typeahead({ 
     source: function (query, process) { 
      var q = '/autocompleteSearch?searchString=' + query;    

      return $.get(q, function (data) { 
       return process(data); 
      }); 
     }, 
     minLength: 3, 
     autoSelect: false 
    }); 
0

ho trovato una soluzione here che funziona con l'aggiunta di questa prima:

var newRender = function(items) { 
    var that = this 

    items = $(items).map(function (i, item) { 
     i = $(that.options.item).attr('data-value', item) 
     i.find('a').html(that.highlighter(item)) 
     return i[0] 
    }) 

    this.$menu.html(items) 
    return this 
}; 
$.fn.typeahead.Constructor.prototype.render = newRender; 

$.fn.typeahead.Constructor.prototype.select = function() { 
    var val = this.$menu.find('.active').attr('data-value'); 
    if (val) { 
     this.$element 
     .val(this.updater(val)) 
     .change(); 
    } 
    return this.hide() 
}; 

che sostituisce il typeahead bootstrap di non inizialmente seleziona qualcosa

Problemi correlati