Tom Select конфигурируется через единый объект опций, который передаётся при инициализации экземпляра. Архитектура настроек построена вокруг расширяемой модели: базовые параметры управляют данными и поведением, отдельные группы отвечают за поиск, создание элементов, рендеринг, работу с удалёнными источниками и плагинами.
optionsМассив исходных элементов, доступных для выбора. Каждый элемент обычно представлен объектом.
options: [
{ id: 1, title: "Москва" },
{ id: 2, title: "Санкт-Петербург" }
]
itemsМассив значений, выбранных по умолчанию.
items: [1]
valueFieldПоле объекта, используемое как значение элемента.
valueField: "id"
labelFieldПоле, отображаемое в интерфейсе.
labelField: "title"
optgroupFieldПоле, определяющее принадлежность к группе.
optgroupField: "category"
optgroupsМассив групп для структурирования списка.
optgroups: [
{ value: "cities", label: "Города" },
{ value: "countries", label: "Страны" }
]
optgroupLabelFieldПоле названия группы.
optgroupLabelField: "label"
optgroupValueFieldПоле идентификатора группы.
optgroupValueField: "value"
optgroupOrderОпределяет порядок группировки (массив значений или функция).
optgroupOrder: ["countries", "cities"]
searchFieldПоле или массив полей, по которым выполняется поиск.
searchField: ["title", "description"]
scoreФункция ранжирования результатов поиска.
score: function(search) {
return function(item) {
return item.title.includes(search) ? 1 : 0;
};
}
shouldLoadОпределяет необходимость загрузки данных при вводе.
shouldLoad: function(query) {
return query.length > 2;
}
loadThrottleЗадержка между запросами загрузки (в мс).
loadThrottle: 300
maxOptionsМаксимальное количество отображаемых элементов.
maxOptions: 100
highlightВключает подсветку совпадений.
highlight: true
placeholderТекст-заполнитель.
placeholder: "Выберите значение"
openOnFocusОткрытие списка при фокусе.
openOnFocus: true
closeAfterSelectЗакрытие списка после выбора элемента.
closeAfterSelect: false
hideSelectedСкрытие уже выбранных элементов из списка.
hideSelected: true
maxItemsМаксимальное количество выбранных элементов.
maxItems: 3
allowEmptyOptionРазрешение пустого значения.
allowEmptyOption: false
createРазрешает создание новых опций на лету.
create: true
createOnBlurСоздание элемента при потере фокуса.
createOnBlur: true
createFilterФункция фильтрации создаваемых значений.
createFilter: function(input) {
return input.length > 1;
}
persistСохранение созданных элементов между сессиями.
persist: true
loadФункция загрузки данных по запросу.
load: function(query, callback) {
fetch(`/api?q=${query}`)
.then(res => res.json())
.then(callback);
}
preloadЗагрузка данных при инициализации.
"true" — всегда"focus" — при фокусе"false" — отключеноpreload: "focus"
renderОбъект шаблонов элементов интерфейса.
render: {
option: function(data, escape) {
return `<div>${escape(data.title)}</div>`;
},
item: function(data, escape) {
return `<div>${escape(data.title)}</div>`;
}
}
escapeФункция экранирования HTML (может переопределяться).
selectOnTabВыбор элемента по нажатию Tab.
selectOnTab: true
selectOnBlurАвтоматический выбор при потере фокуса.
selectOnBlur: false
delimiterРазделитель при множественном вводе.
delimiter: ","
maxOptionsОграничение количества отображаемых элементов.
loadThrottleРегулирование частоты запросов.
sortFieldПоле сортировки элементов.
sortField: "title"
searchConjunctionЛогика объединения поисковых терминов.
"and""or"searchConjunction: "and"
firstUrlАвтопереход по первому результату (используется редко).
onInitializeКолбэк инициализации.
onInitialize: function() {
console.log("init");
}
onChangeСрабатывает при изменении выбора.
onChange: function(value) {
console.log(value);
}
onItemAddДобавление элемента.
onItemAdd: function(value) {}
onItemRemoveУдаление элемента.
onItemRemove: function(value) {}
pluginsСписок расширений поведения.
plugins: ["remove_button", "dropdown_input"]
Расширения влияют на UI и поведение без изменения основной логики.
controlInputУправление полем ввода.
controlInput: true
openOnCreateОткрытие списка после создания элемента.
openOnCreate: true
dropdownParentDOM-узел для рендера выпадающего списка.
dropdownParent: document.body
load +
shouldLoad взаимодействиеКомбинация определяет, когда и как происходит динамическая подгрузка данных, позволяя строить ленивые интерфейсы без полной загрузки массива заранее.
Структура опций Tom Select построена так, что каждый параметр влияет на отдельный слой поведения:
Такое разделение позволяет комбинировать параметры без конфликтов и формировать поведение компонента через декларативную конфигурацию.