Использование Bootstrap Tokenfield с начальной загрузкой 3
У меня уже есть библиотека Bootstrap 3 Typeahead, интегрированная в мое веб-приложение. Я хочу включить систему тегов для полей ввода текста, поэтому я заглянул в Bootstrap Tokenfield. У меня проблемы с тем, чтобы две библиотеки работали друг с другом. Библиотека Tokenfield работает, но предложения Typeahead не появляются. Вот HTML для одного из моих входов:
<input name="tags-input" class="form-control" id="tags-input" type="text" data-source='["Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7"]' data-provide="typeahead" data-items="4" autocomplete="off">
Вот мой JavaScript для ввода текста:
$(document).ready(function()
{
$("#tags-input").tokenfield();
});
Я работал над этим некоторое время и мог бы использовать руку. Я не уверен, как изменить мой HTML/JavaScript, чтобы обе библиотеки работали. Заранее благодарю за любую помощь!
ОБНОВЛЕНИЕ (20 июля 2015 г.)
Я получил выпадающий список Bootstrap 3 Typeahead, но он не работает должным образом с плагином. Я не могу найти способ установить источник данных, используя атрибуты данных, поэтому я использовал JavaScript. Вот мой новый код:
<input name="tags-input" class="form-control" id="tags-input" type="text" autocomplete="off">
И вот новый JavaScript:
$(document).ready(function()
{
$("#tags-input").tokenfield(
{
typeahead: { source: ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7"] }
});
});
На данный момент я задаюсь вопросом, стоит ли вообще этого придерживаться. Я мог бы вместо этого переключиться на плагин Twitter Typeahead. Мне действительно нравится, как я могу использовать атрибуты данных с Bootstrap 3 Typeahead.
1 ответ
В итоге я переключился на плагин Bootstrap Tags Input, потому что он лучше работает с плагином Bootstrap 3 Typeahead. Вот как я это использовал:
HTML
<input name="tags-input" class="form-control" id="tags-input" type="text" autocomplete="off">
JavaScript
$(document).ready(function()
{
$("#tags-input").tagsinput(
{
typeahead: { source: ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7"] }
});
// Handle the event that fires when a tag is added
$("#tags-input").on('itemAdded', function(event)
{
// Hide the Bootstrap 3 Typeahead dropdown menu since it doesn't hide automatically for some reason
$(".typeahead.dropdown-menu").hide();
// Clear the value of the tagsinput's internal <input> element, which is used for adding tags
$(this).tagsinput('input').val("");
});
});
Первый блок JavaScript ($("#tags-input").tagsinput...
) инициализирует плагин для ввода тегов. После этого я создаю прослушиватель событий для каждого добавленного нового тега, чтобы исправить следующие проблемы:
- Раскрывающееся меню typeahead не скрывается после добавления тега
- После того, как элемент typeahead выбран, значение typeahead дублируется во входных данных
Как видно из комментариев JavaScript, код в прослушивателе событий для itemAdded
Событие скрывает выпадающее меню и очищает повторяющиеся значения ввода. Я не совсем уверен, почему эти поведения выставлены, но я предполагаю, что они являются результатом обновленной библиотеки jQuery.
Решение выше работает безупречно для меня в моем тестировании. Надеюсь, это поможет кому-то еще!