Я столкнулся с той же проблемой, поэтому я использовал @ Ravindra tip (+1 BTW), чтобы посмотреть, смогу ли я перепроектировать плагин и выяснить, что функция tagSource должна вернуть.
Функция tagSource возвращает логическое значение. Значение true возвращается, если тег в массиве availableTags отображается в списке автозаполнения. False возвращается, чтобы обозначить, что тег не должен отображаться.
Вот функция по умолчанию tagSource, которая использует indexOf, чтобы определить, соответствует ли набранный текст до начала тега в массиве availableTags:
Оригинал, функция по умолчанию:
tagSource: function(search, showChoices) {
var filter = search.term.toLowerCase();
var choices = $.grep(this.options.availableTags, function(element) {
// Only match autocomplete options that begin with the search term.
// (Case insensitive.)
return (element.toLowerCase().indexOf(filter) === 0);
});
showChoices(this._subtractArray(choices, this.assignedTags()));
}
I скопировал функцию и вставил ее в функцию .tagit, чтобы она была включена в качестве одного из параметров, передаваемых в функцию инициализации тега jQuery. Затем я изменил его, чтобы использовать метод match, который использует сопоставление с образцом, чтобы вернуть часть строки, соответствующую образцу. Если совпадение возвращает ноль, не показывать его в списке. Если он возвращает что-то еще, покажите тег в списке:
Измененная функция, переданная в качестве аргумента:
tagSource: function(search, showChoices) {
var filter = search.term.toLowerCase();
var choices = $.grep(this.options.availableTags, function(element) {
// Only match autocomplete options that begin with the search term.
// (Case insensitive.)
//return (element.toLowerCase().indexOf(filter) === 0);
console.info(element.toLowerCase().match(filter) + " : " + element + " : " + filter);
return (element.toLowerCase().match(filter) !== null);
});
showChoices(this._subtractArray(choices, this.assignedTags()));
}
Пример:
$('#tagged').tagit({
onTagRemoved: function() {
alert("Removed tag");
},
availableTags: [ "one" , "two one" , "three" , "four" , "five" ],
// override function to modify autocomplete behavior
tagSource: function(search, showChoices) {
var filter = search.term.toLowerCase();
var choices = $.grep(this.options.availableTags, function(element) {
// Only match autocomplete options that begin with the search term.
// (Case insensitive.)
//return (element.toLowerCase().indexOf(filter) === 0);
console.info(element.toLowerCase().match(filter) + " : " + element + " : " + filter);
return (element.toLowerCase().match(filter) !== null);
});
showChoices(this._subtractArray(choices, this.assignedTags()));
}
});