Метод setRawValue в Cleave.js
используется для программного задания «сырого» значения поля ввода без
применения форматирования на уровне отображения. В отличие от
стандартного обновления значения через DOM или метода
setValue, данный метод работает с внутренним представлением
данных, которое библиотека использует до применения масок, разделителей
и локализованных правил отображения.
Ключевая особенность заключается в том, что передаваемое значение воспринимается как исходное (raw), а не как уже отформатированная строка. Это позволяет избежать двойного форматирования и некорректного преобразования данных при повторной установке значения.
Внутренняя модель Cleave.js строится вокруг двух состояний:
Метод setRawValue напрямую воздействует на raw-слой,
после чего Cleave.js самостоятельно пересчитывает отображаемое
значение.
Пример концептуального различия:
79991234567+7 999 123 45 67Если установить значение через setRawValue, библиотека
автоматически выполнит преобразование raw → formatted согласно текущим
настройкам инстанса.
Внутренняя сигнатура метода выглядит следующим образом:
cleave.setRawValue(value);
Параметр:
value — строка или число, представляющее
неформатированное значение.Метод не возвращает значение. Его задача — изменить состояние текущего экземпляра Cleave и обновить DOM-элемент.
При вызове метода происходит последовательность операций:
Переданное значение преобразуется в строку (если это число).
Значение сохраняется во внутреннем raw state.
Применяются правила текущей конфигурации Cleave.js:
blocks);delimiter);prefix);Обновляется значение DOM-элемента.
Генерируются соответствующие события изменения (если они активны).
Метод setValue и setRawValue часто
используются взаимозаменяемо, однако их поведение принципиально
различается:
При numeral: true значение интерпретируется как
число:
cleave.setRawValue("1000000");
Результат отображения зависит от настроек:
Пример результата:
1,000,000
При использовании телефонной маски raw-значение обычно содержит только цифры:
cleave.setRawValue("79991234567");
Cleave преобразует его в формат:
+7 999 123 45 67
Особенность заключается в том, что любые символы, кроме цифр, будут проигнорированы при обработке raw-значения.
При конфигурации типа date: true:
cleave.setRawValue("20260125");
При заданном формате YYYY-MM-DD отображение станет:
2026-01-25
Важно учитывать, что raw должен соответствовать ожидаемой структуре даты, иначе возможны частичные или некорректные преобразования.
При кастомных масках:
{
blocks: [4, 4, 4],
delimiter: "-"
}
Вызов:
cleave.setRawValue("123456789012");
Результат:
1234-5678-9012
При использовании префикса:
{
prefix: "+7 ",
noImmediatePrefix: false
}
Вызов:
cleave.setRawValue("9991234567");
Отображение:
+7 999 123 45 67
Если включён noImmediatePrefix: true, поведение
меняется: префикс может не отображаться до ввода значимых символов,
однако при setRawValue он всё равно добавляется, так как
значение уже считается установленным.
Перед применением raw-значения Cleave.js выполняет нормализацию:
Пример:
cleave.setRawValue(" +7 (999) 123-45-67 ");
Внутренне значение преобразуется к:
79991234567
После чего применяется форматирование.
В большинстве конфигураций вызов setRawValue приводит к
триггеру событий:
inputchangeОднако важно учитывать, что событие инициируется программно, и его поведение зависит от привязки Cleave к DOM-элементу.
Особенность:
После вызова метода обновляются следующие внутренние состояния:
При этом экземпляр Cleave остаётся полностью работоспособным без необходимости повторной инициализации.
cleave.setRawValue("+7 999 123 45 67");
Результат может привести к двойной обработке или игнорированию части символов.
Корректнее:
cleave.setRawValue("79991234567");
Если формат ожидает YYYYMMDD, передача:
cleave.setRawValue("25-01-2026");
может привести к некорректному отображению или частичной интерпретации.
При изменении конфигурации после установки значения:
cleave.setRawValue("1234");
cleave.setProperties({ blocks: [2, 2] });
отображение может измениться без изменения raw, что приводит к несоответствию ожиданий при визуальном анализе.
При получении данных с сервера обычно приходят «чистые» значения:
fetch("/api/user")
.then(res => res.json())
.then(data => {
cleave.setRawValue(data.phone);
});
При восстановлении состояния формы:
formState.forEach(field => {
cleaveInstances[field.name].setRawValue(field.value);
});
const cleave = new Cleave(input, {
phone: true,
phoneRegionCode: "KZ"
});
cleave.setRawValue("7012345678");
Метод setRawValue является лёгкой операцией, однако при
частых вызовах в циклах (например, при анимации или потоковой обработке
данных) может приводить к:
В подобных сценариях предпочтительно батчевое обновление или временное отключение обработки событий, если архитектура приложения это допускает.