Modifier Il y a déjà eu un tirage à ce sujet : https://github.com/twitter/bootstrap/pull/2007
Vous pouvez vous approcher du comportement souhaité en utilisant un proxy pour le typeahead : Démonstration (jsfiddle)
var $myTextarea = $('#myTextarea');
$('.typeahead').typeahead({
source: source,
updater: function(item) {
$myTextarea.append(item, ' ');
return '';
}
});
Je pense que le updater
est destinée à ce genre de choses, vous renvoyez simplement ce qui sera affiché.
Ou si vous voulez vraiment que tout soit dans le même élément d'entrée vous devrez modifier d'autres méthodes pour que le système ne corresponde qu'à l'élément actuellement typé : Démonstration (jsfiddle)
function extractor(query) {
var result = /([^,]+)$/.exec(query);
if(result && result[1])
return result[1].trim();
return '';
}
$('.typeahead').typeahead({
source: source,
updater: function(item) {
return this.$element.val().replace(/[^,]*$/,'')+item+',';
},
matcher: function (item) {
var tquery = extractor(this.query);
if(!tquery) return false;
return ~item.toLowerCase().indexOf(tquery.toLowerCase())
},
highlighter: function (item) {
var query = extractor(this.query).replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
return '<strong>' + match + '</strong>'
})
}
});
Celle-ci n'est pas évidente, car vous devez taper à la fin, après le caractère spécial.