В Cleave.js параметры prefix и
noImmediatePrefix отвечают за управление фиксированным
начальным текстом в поле ввода и поведением его появления при вводе
данных. Эти опции особенно важны при работе с форматами, где часть
строки должна быть неизменяемой: валюты, международные коды,
идентификаторы и структурированные номера.
prefix задаёт фиксированную строку, которая
автоматически добавляется в начало значения input-поля. Это может быть
символ валюты, код страны, технический маркер или любой другой
неизменяемый префикс.
При указании prefix библиотека автоматически:
import Cleave from 'cleave.js';
const cleave = new Cleave('#input', {
prefix: 'USD ',
numeral: true
});
В этом случае поле всегда будет начинаться с USD, а
пользователь вводит только числовую часть.
Поведение prefix тесно связано с внутренним механизмом
нормализации значения:
Важно учитывать, что prefix влияет не только на
отображение, но и на структуру данных, которую возвращает поле.
Наиболее частый сценарий — денежные значения:
new Cleave('#price', {
prefix: '$',
numeral: true,
numeralThousandsGroupStyle: 'thousand'
});
Результат ввода:
$1,000,000
Здесь префикс становится частью UI-формата, но не частью числовой логики.
noImmediatePrefixnoImmediatePrefix управляет моментом появления префикса
при вводе данных. Его задача — изменить поведение prefix
таким образом, чтобы префикс не отображался сразу при инициализации или
первом вводе.
Без noImmediatePrefix:
noImmediatePrefix: trueПри включении:
new Cleave('#input', {
prefix: '+7',
noImmediatePrefix: true,
phone: true
});
В этом случае поле выглядит пустым до ввода первой цифры. После
ввода, например 9, значение становится:
+79
prefix и noImmediatePrefixЭти два параметра работают совместно и образуют единый механизм управления начальной частью строки.
prefix: 'EUR '
noImmediatePrefix: false
Поведение:
EUR отображается сразу;prefix: 'EUR '
noImmediatePrefix: true
Поведение:
В случаях, когда значение устанавливается программно:
const cleave = new Cleave('#input', {
prefix: 'ID-',
noImmediatePrefix: true,
blocks: [3, 3, 3]
});
cleave.setRawValue('123456');
Результат:
ID-123-456
Префикс добавляется только после того, как появляется фактическое содержимое.
При каждом обновлении значения выполняется проверка:
Если noImmediatePrefix = true, добавляется
дополнительное условие:
Одна из сложных частей реализации — управление кареткой:
new Cleave('#salary', {
prefix: '₸ ',
numeral: true,
noImmediatePrefix: false
});
Используется для стабильного отображения валютного обозначения.
new Cleave('#phone', {
prefix: '+7',
noImmediatePrefix: true,
phone: true
});
Позволяет избежать визуального «засорения» поля до ввода данных.
new Cleave('#order', {
prefix: 'ORD-',
noImmediatePrefix: true,
blocks: [4, 4, 4]
});
Формирует структурированный ID вида:
ORD-1234-5678-9012
Если prefix содержит пробелы или спецсимволы, важно учитывать:
Распространённое заблуждение:
Фактически:
При комбинировании:
numeral требует числовой обработки;blocks создают сегментацию строки;prefix всегда остаётся фиксированным сегментом
слева.Неправильная конфигурация может привести к конфликтам отображения, если формат не согласован.
При noImmediatePrefix: true:
'' остаётся пустым;При false:
При полном удалении содержимого:
false prefix остаётся;true поле возвращается к состоянию «без
prefix».cleave.setRawValue('');
noImmediatePrefix: false prefix
восстанавливается;true остаётся скрытым до нового ввода.Поведение можно свести к следующей модели:
prefix задаёт фиксированную структуру начала
строки;noImmediatePrefix управляет моментом её визуального
появления;Эти параметры используются в случаях, где важно одновременно обеспечить строгую структуру данных и удобство начального взаимодействия с полем ввода.