Как улучшить автозаполнение jQuery "Tag-It"? - PullRequest
4 голосов
/ 27 июля 2011

Мне нравится плагин Tag-It в jQuery, но если он настроен на автозаполнение, он не всегда работает так, как я хочу.

Вот пример.

МойМассив автозаполнения состоит из "Pink Lady Apple", "Granny Smith Apple", "Golden Delicious Apple" и "Apple."или Золотой Вкусный.Это только подсказывает Apple.Есть ли способ, которым я могу изменить это так, чтобы он также сканировал теги, содержащие Apple, но которые не начинаются с Apple?

Ответы [ 3 ]

6 голосов
/ 22 февраля 2012

Я столкнулся с той же проблемой, поэтому я использовал @ 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()));
    }
});
4 голосов
/ 27 января 2012

Это работает для меня с tagSource свойством Tag-it . Я использую http://aehlke.github.com/tag-it/

0 голосов
/ 27 июля 2011

Tag - наследует автозаполнение от реализации wai-aria. Это знает только три состояния по умолчанию:

Нет - вообще не завершено
Inline - начиная с ...
Список - Все в наличии

Так что без расширения tag-it использовать другой подход к автозаполнению это невозможно.

Пожалуйста, смотрите здесь для получения дополнительной информации о WAI-ARIA:

http://www.w3.org/WAI/intro/aria

http://test.cita.illinois.edu/aria/

...