Маска ввода для цифр на чистом JavaScript
Доброго времени суток! В данном примере я покажу Вам как можно создать маску ввода для чисел на чистом JavaScript.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JS Input Mask</title>
</head>
<body>
<input type="text" data-format="(***) ***-****" data-mask="(###) ###-####">
<input type="text" data-format="**.**.****" data-mask="MM.DD.YYYY">
<input type="text" data-format="+* (***) ***-**-**" data-mask="+* (***) ***-**-**" />
<script>
function doFormat(value, pattern, mask)
{
// удаляем все нечисловые значения из значения
const strippedValue = value.replace(/[^0-9]/g, "");
// преобразуем строку-значение в массив символов
const chars = strippedValue.split('');
let count = 0;
let formatted = '';
// форматируем строку
for (let i = 0; i < pattern.length; i++)
{
const char = pattern[i];
if (chars[count])
{
if (/\*/.test(char)) {
formatted += chars[count];
count++;
} else {
formatted += char;
}
}
else if (mask)
{
const splittedMask = mask.split('');
if (splittedMask[i])
{
formatted += splittedMask[i];
}
}
}
return formatted;
}
// проходимся по каждому элементу назначая на них обработчики
// нажатия клавиш
document.querySelectorAll('[data-mask]').forEach(function (e) {
function format(elem) {
const val = doFormat(elem.value, elem.getAttribute('data-format'));
elem.value = doFormat(elem.value, elem.getAttribute('data-format'), elem.getAttribute('data-mask'));
if (elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', val.length);
range.select();
} else if (elem.selectionStart) {
elem.focus();
elem.setSelectionRange(val.length, val.length);
}
}
e.addEventListener('keyup', function () {
format(e);
});
e.addEventListener('keydown', function () {
format(e);
});
format(e)
});
</script>
</body>
</html>
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.