Cleave.js предоставляет гибкую систему расширения функциональности через плагины. Плагин — это объект, который внедряется в процесс обработки ввода и может модифицировать поведение форматирования текста, валидацию или реакции на события пользователя. Архитектура основана на нескольких ключевых компонентах:
plugins. Каждый плагин должен
реализовать метод init, вызываемый при создании экземпляра
Cleave.onInput, onKeyDown,
onPaste) для динамического управления поведением поля.getFormattedValue, setRawValue и других
внутренних функций Cleave.js.destroy и reset, обеспечивая корректное
удаление всех слушателей и очистку состояния при уничтожении экземпляра
Cleave.Минимальный плагин состоит из объекта с обязательным методом
init и необязательными методами обработки событий и
очистки:
class ExamplePlugin {
constructor(instance, options) {
this.instance = instance; // Экземпляр Cleave
this.options = options; // Пользовательские опции
}
init() {
// Код инициализации плагина
this.instance.input.addEventListener('input', this.onInput.bind(this));
}
onInput(event) {
// Пример: автоматическое удаление пробелов
const value = event.target.value.replace(/\s+/g, '');
this.instance.setRawValue(value);
}
destroy() {
// Очистка слушателей при уничтожении
this.instance.input.removeEventListener('input', this.onInput);
}
}
constructor(instance, options) —
сохраняет ссылку на Cleave и пользовательские опции.init() — основной метод, где
регистрируются события и устанавливаются начальные параметры.destroy() — освобождает ресурсы,
предотвращая утечки памяти.Для подключения плагина используется массив plugins при
создании экземпляра Cleave:
const cleave = new Cleave('#input', {
creditCard: true,
plugins: [
new ExamplePlugin(this, { removeSpaces: true })
]
});
Особенности подключения:
Плагины могут изменять текст до или после применения встроенного форматирования. Различие между этими этапами важно:
Пример плагина, вставляющего тире после каждых трех символов:
class DashPlugin {
constructor(instance) {
this.instance = instance;
}
init() {
this.instance.input.addEventListener('input', this.formatValue.bind(this));
}
formatValue() {
let value = this.instance.getRawValue().replace(/-/g, '');
value = value.match(/.{1,3}/g)?.join('-') || '';
this.instance.setRawValue(value);
}
destroy() {
this.instance.input.removeEventListener('input', this.formatValue);
}
}
Cleave.js поддерживает привязку событий на уровне плагинов:
onKeyDown(event) — позволяет
перехватывать и модифицировать клавиши до стандартной обработки.onPaste(event) — позволяет фильтровать
или изменять вставляемый текст.onInput(event) — основной способ
динамического изменения текста при вводе.Использование этих событий повышает гибкость и позволяет реализовывать нестандартные сценарии, такие как:
При использовании нескольких плагинов важно учитывать:
setRawValue,
getFormattedValue), должны корректно вызывать родительские
методы через instance.destroy, чтобы предотвратить утечки памяти и дублирование
слушателей.Каждый плагин может принимать объект опций с настраиваемыми параметрами:
const cleave = new Cleave('#phone', {
phone: true,
plugins: [
new CustomPlugin(this, { format: 'dash', maxLength: 12 })
]
});
Примеры опций:
maxLength — ограничение длины ввода.format — стиль форматирования (тире, пробелы,
точки).allowNumbers / allowLetters — фильтрация
допустимых символов.Опции делают плагин универсальным и легко адаптируемым под разные поля ввода.
onInput:
использовать дебаунс или throttling для полей с большим количеством
символов.setRawValue, getFormattedValue) вместо прямой
модификации input.value.Плагины в Cleave.js предоставляют мощный инструмент расширения стандартного поведения масок, позволяя создавать гибкие и интерактивные формы с поддержкой сложных сценариев форматирования и валидации.