Clear Button в Tom Select реализуется через встроенный плагин
clear_button, который добавляет в интерфейс компонента
интерактивную кнопку сброса выбранных значений. Этот механизм работает
поверх базовой архитектуры селекта и взаимодействует с внутренним
состоянием выбранных элементов, не нарушая модель данных и не требуя
внешнего управления состоянием.
Активация функциональности выполняется через систему плагинов:
new TomSelect('#select', {
plugins: ['clear_button']
});
При подключении плагина библиотека расширяет DOM-контейнер селекта дополнительным элементом управления. Кнопка интегрируется в область control и визуально связывается с текущим состоянием выбора.
Важной особенностью является то, что плагин не изменяет поведение ядра компонента, а лишь подписывается на события изменения состояния и добавляет дополнительный триггер для очистки.
Логика очистки в плагине clear_button опирается на
внутренние методы экземпляра:
clear() — основной метод сброса значенийsetValue(null) или setValue([]) —
альтернативные формы очистки в зависимости от режимаclearOptions() не используется для удаления выбранных
значений, так как относится к списку опцийПри активации кнопки происходит вызов внутреннего метода очистки, который:
Clear Button ведёт себя по-разному в зависимости от конфигурации селекта.
В режиме single select очищается единственное выбранное значение, после чего компонент возвращается в состояние пустого выбора.
new TomSelect('#select', {
plugins: ['clear_button'],
maxItems: 1
});
В этом режиме после очистки input становится пустым, а placeholder снова отображается.
В режиме multiple select очистка затрагивает массив выбранных значений:
new TomSelect('#select', {
plugins: ['clear_button'],
maxItems: null
});
После вызова очистки массив значений устанавливается в пустое состояние, а все выбранные теги удаляются из DOM.
Плагин clear_button не всегда отображает элемент
управления. Отрисовка зависит от состояния компонента:
Это поведение реализуется через наблюдение за событиями изменения
(change, item_add,
item_remove).
Clear Button тесно связан с системой событий экземпляра.
Ключевые события:
onChange — обновление состояния после очисткиonItemRemove — вызывается при удалении отдельных
элементовonInitialize — используется для первичной синхронизации
кнопкиonDropdownOpen и onDropdownClose — могут
влиять на визуальное состояние кнопки в некоторых реализациях UIПри очистке через кнопку фактически инициируется цепочка событий,
эквивалентная программному вызову clear(), что обеспечивает
консистентность поведения независимо от источника изменения.
При использовании опций create и persist
поведение очистки приобретает дополнительные особенности.
new TomSelect('#select', {
plugins: ['clear_button'],
create: true,
persist: false
});
Если включено создание новых опций, очистка не удаляет сами опции из
списка доступных значений. Она затрагивает только выбранные элементы.
При этом созданные пользователем значения остаются в dataset, если
persist активирован.
Поскольку кнопка является лишь UI-обёрткой над методом
clear, аналогичный эффект достигается напрямую:
const ts = new TomSelect('#select', {
plugins: ['clear_button']
});
ts.clear();
Этот вызов полностью повторяет поведение пользовательского взаимодействия с кнопкой очистки, включая обновление интерфейса и генерацию событий.
Если компонент находится в состоянии disabled, кнопка
очистки:
clear()new TomSelect('#select', {
plugins: ['clear_button'],
disabled: true
});
При динамическом переключении setDisabled(true/false)
состояние кнопки синхронизируется автоматически через механизм
обновления UI.
Визуальное представление кнопки формируется через стандартные CSS-классы Tom Select. Обычно используется контейнер control, внутри которого добавляется элемент действия очистки.
Пример типовой структуры:
<div class="ts-wrapper">
<div class="ts-control">
<div class="ts-item">Value</div>
<div class="clear-button"></div>
</div>
</div>
Стилизация может включать:
Переопределение внешнего вида выполняется через CSS без изменения логики плагина.
При использовании load или динамического источника
данных очистка не влияет на процесс загрузки:
new TomSelect('#select', {
plugins: ['clear_button'],
load: function(query, callback) {
fetch('/api/options?q=' + query)
.then(r => r.json())
.then(callback);
}
});
После очистки текущие значения удаляются, но активные запросы загрузки продолжают выполняться независимо от состояния выбора.
Если значение селекта изменяется программно извне, кнопка очистки автоматически реагирует на изменения состояния:
ts.setValue(['a', 'b']);
ts.clear();
После выполнения clear() DOM и внутреннее состояние
синхронизируются, включая скрытие кнопки при пустом значении и
обновление списка элементов.
Плагин clear_button имеет ряд поведенческих
особенностей:
В сложных сценариях с кастомными рендерами может потребоваться
дополнительная синхронизация состояния кнопки через ручные подписки на
события change.
При необходимости поведение кнопки может быть модифицировано через переопределение рендера control:
new TomSelect('#select', {
plugins: ['clear_button'],
render: {
control: function(data, escape) {
return `
<div class="ts-control">
${data.items.map(i => `<div class="item">${escape(i)}</div>`).join('')}
<div class="clear-button-custom"></div>
</div>
`;
}
}
});
В таком подходе логика очистки остаётся неизменной, но визуальное представление полностью контролируется разработчиком, включая позиционирование и поведение элементов управления.