= f(, , , , )
Взаимодействие с компонентом Tom Select строится вокруг единого состояния выбора, которое синхронизируется между пользовательским вводом, визуальным списком опций и внутренним API. Помимо стандартного клика по элементам выпадающего списка, библиотека предоставляет несколько параллельных каналов управления, позволяющих полностью переопределять сценарии использования: от внешних кнопок до программного управления и кастомных обработчиков событий.
Базовое поведение мыши в Tom Select включает раскрытие списка по фокусу, выбор элемента по клику и удаление выбранных тегов через встроенные элементы управления.
Расширение этого поведения возможно через перехват событий DOM:
Ключевой момент заключается в том, что визуальный элемент опции не является самостоятельной логикой — он отражает состояние, управляемое экземпляром Tom Select. Это позволяет безопасно переопределять действия:
const select = new TomSelect('#select', {
onOptionSelect: function(value, option) {
console.log('Выбор перехвачен:', value);
return true;
}
});
При необходимости можно блокировать стандартное поведение и реализовать альтернативную логику, например подтверждение выбора или фильтрацию по внешним условиям.
Клавиатурное взаимодействие в Tom Select выходит за рамки стандартного навигационного паттерна «стрелки + Enter». Внутренний обработчик событий поддерживает несколько режимов:
Однако ключевое расширение достигается через перехват событий
keydown:
const select = new TomSelect('#select', {
onKeyDown: function(event) {
if (event.key === 'Tab' && event.shiftKey) {
this.clear();
return false;
}
}
});
Подобный подход позволяет реализовать альтернативные сценарии:
Важно учитывать, что возврат false из обработчика
блокирует стандартное поведение, что фактически превращает Tom Select в
управляемый компонент.
На мобильных устройствах Tom Select адаптирует поведение dropdown к особенностям touch-интерфейса. Основное отличие заключается в том, что ввод часто происходит через системную клавиатуру, а прокрутка списка опций заменяет hover-состояния.
Дополнительные аспекты взаимодействия:
openOnFocus.Для сложных мобильных интерфейсов часто используется внешний контроль состояния:
select.open();
select.close();
Это позволяет привязать открытие списка к нестандартным жестам интерфейса или кнопкам вне компонента.
Одним из ключевых альтернативных способов взаимодействия является прямое использование API Tom Select. Это превращает компонент из UI-элемента в управляемую модель данных.
Основные методы управления:
Пример внешнего управления:
const select = new TomSelect('#select');
document.querySelector('#btn-add').addEventListener('click', () => {
select.addItem('new_value');
});
document.querySelector('#btn-clear').addEventListener('click', () => {
select.clear();
});
Такой подход позволяет полностью отделить UI от логики выбора, что особенно важно в сложных формах и SPA-приложениях.
Tom Select не ограничивает взаимодействие собственным input-элементом. Любые внешние DOM-элементы могут быть связаны с его состоянием.
Распространённые сценарии:
Пример синхронизации:
document.querySelector('#select-all').addEventListener('click', () => {
const values = Object.keys(select.options);
select.setValue(values);
});
Такой подход фактически превращает Tom Select в слой представления над внешней бизнес-логикой.
Система событий Tom Select позволяет строить реактивные цепочки, где каждое действие пользователя или API вызывает внешние реакции.
Ключевые события:
changeitem_additem_removedropdown_opendropdown_closefocusblurtypeloadИспользование событий позволяет реализовать поведение, которое не предусмотрено базовой логикой:
select.on('item_add', function(value) {
console.log('Добавлено:', value);
analytics.track('select_add', value);
});
События становятся альтернативным способом управления, заменяя прямое обращение к DOM и позволяя строить слабосвязанные системы.
При использовании удалённого поиска альтернативные способы взаимодействия становятся особенно важными. Пользовательский ввод может не приводить к немедленному обновлению списка, а зависеть от асинхронных данных.
Механизмы управления:
load события;options;const select = new TomSelect('#select', {
load: function(query, callback) {
fetch(`/api/search?q=${query}`)
.then(res => res.json())
.then(data => callback(data));
}
});
Дополнительный уровень контроля достигается через ручное управление вводом:
select.on('type', function(str) {
if (str.length < 3) {
select.clearOptions();
}
});
Фокусировка в Tom Select не ограничивается стандартным click-to-focus поведением. Программный контроль позволяет изменять UX сценарии:
select.focus();
select.blur();
Эти методы позволяют встроить компонент в нестандартные интерфейсные потоки, включая мастера форм и многошаговые сценарии.
Комбинирование API, событий и DOM-управления позволяет полностью заменить стандартную модель взаимодействия Tom Select на кастомную:
Такой подход превращает компонент в универсальный интерфейсный слой, где Tom Select выступает не как готовый контрол, а как управляемая система выбора данных с множеством точек перехвата и расширения.