Cleave.js работает поверх DOM-элемента <input> и
разделяет два ключевых уровня данных:
При очистке или сбросе важно учитывать, что изменение только DOM-значения не всегда синхронизирует внутреннее состояние экземпляра. Библиотека поддерживает собственный кэш, который может восстанавливать формат при следующих событиях ввода.
Базовый способ сброса — прямое изменение значения input:
input.value = '';
После такого сброса экземпляр Cleave.js продолжает существовать и отслеживать изменения. При следующем вводе форматирование будет применено заново.
Особенность этого подхода заключается в том, что внутреннее состояние не всегда очищается полностью, особенно если ранее использовались сложные маски (телефон, кредитные карты, кастомные паттерны).
Корректная очистка выполняется через API экземпляра:
cleave.setRawValue('');
Такой способ обеспечивает:
При использовании числовых масок или phone-паттернов этот метод является предпочтительным.
При работе с числовыми форматами (например, разделители тысяч или фиксированная точность) очистка через пустую строку может приводить к отображению нулей в зависимости от конфигурации.
Пример:
const cleave = new Cleave(input, {
numeral: true,
numeralDecimalScale: 2
});
cleave.setRawValue('');
В таких сценариях возможны следующие состояния:
numeralPositiveOnly и
отсутствует дефолтное значение);Для полного удаления логики форматирования используется метод уничтожения:
cleave.destroy();
После выполнения:
Этот способ применяется при динамической смене форматов или при повторной инициализации компонента.
После destroy() очистка выполняется стандартным
образом:
input.value = '';
При использовании HTML-формы с кнопкой reset поведение зависит от способа инициализации:
<form>
<input id="phone">
<button type="reset">Reset</button>
</form>
Если Cleave.js привязан к input, браузер сбрасывает значение до initialValue, но библиотека может повторно применить форматирование после события reset.
Для корректной синхронизации часто используется обработка события:
form.addEventListener('reset', () => {
cleave.setRawValue('');
});
Это устраняет расхождение между DOM reset и внутренним состоянием маски.
В приложениях с динамическими формами (SPA) очистка часто связана с переиспользованием одного input под разные маски.
Типичный сценарий:
В этом случае последовательность:
cleave.destroy();
input.value = '';
const cleave = new Cleave(input, newConfig);
обеспечивает полное обнуление состояния.
Помимо явной очистки, часто используется установка пустого значения через обновление:
cleave.setRawValue(null);
или
cleave.setRawValue('');
Разница зависит от версии и конфигурации:
null может интерпретироваться как отсутствие значения и
приводить к повторной инициализации форматтера.При интеграции Cleave.js с фреймворками (React, Vue, Angular) важно учитывать, что очистка может происходить на двух уровнях:
Если очищается только DOM, а state остаётся прежним, Cleave может восстановить старое значение при следующем ререндере.
Корректная модель:
setState({ phone: '' });
cleave.setRawValue('');
При использовании комбинированных масок (например, дата + время, кастомные блоки) очистка должна учитывать структуру шаблона.
Пример поведения:
DD/MM/YYYY при очистке возвращается к пустым
сегментам;cleave.setRawValue('');
в таких случаях сбрасывает все сегменты одновременно.
После выполнения очистки через API возможны три устойчивых состояния:
Поведение определяется комбинацией настроек:
numeraldatephonedelimiterprefixОчистка часто привязывается к событиям интерфейса:
В таких сценариях используется единый подход:
function clearField(cleave, input) {
cleave.setRawValue('');
input.value = '';
}
Это гарантирует согласованность между DOM и внутренним состоянием Cleave.js.
После очистки библиотека возвращается в исходное состояние:
Это делает поведение предсказуемым при повторном вводе данных без необходимости переинициализации экземпляра.