В одном уроке я уже писал про маски ввода при помощи jQuery плагина maskedinput. Данная библиотека довольно тяжелая, да и не все в последнее время используют jQuery. Поэтому решил поделится небольшим скриптом на нативном .js (830 байт), который работает без каких либо дополнительных библиотек.
HTML разметка input
<input value="" class="tel">
Все стандартно, маска будет добавляться к импутам с классом «tel».
JS код маски
window.addEventListener("DOMContentLoaded", function() {
[].forEach.call( document.querySelectorAll('.tel'), function(input) {
var keyCode;
function mask(event) {
event.keyCode && (keyCode = event.keyCode);
var pos = this.selectionStart;
if (pos < 3) event.preventDefault();
var matrix = "+7 (___) ___ ____",
i = 0,
def = matrix.replace(/\D/g, ""),
val = this.value.replace(/\D/g, ""),
new_value = matrix.replace(/[_\d]/g, function(a) {
return i < val.length ? val.charAt(i++) : a
});
i = new_value.indexOf("_");
if (i != -1) {
i < 5 && (i = 3);
new_value = new_value.slice(0, i)
}
var reg = matrix.substr(0, this.value.length).replace(/_+/g,
function(a) {
return "\\d{1," + a.length + "}"
}).replace(/[+()]/g, "\\$&");
reg = new RegExp("^" + reg + "$");
if (!reg.test(this.value) || this.value.length < 5 || keyCode > 47 && keyCode < 58) {
this.value = new_value;
}
if (event.type == "blur" && this.value.length < 5) {
this.value = "";
}
}
input.addEventListener("input", mask, false);
input.addEventListener("focus", mask, false);
input.addEventListener("blur", mask, false);
input.addEventListener("keydown", mask, false);
});
});
Смотреть demo
Скачать js скрипт маски ввода
Огромное спасибо! Ты сэкономил мне пару часов жизни!
Всегда пожалуйста)))
Молодец, чувак, но твоя маска сыро вата..
ну форматирует данные, а если не до конца введено, то ей пофигу))
вспомни как $.mask() работает)))
Для моих целей достаточно, главное что страницу не грузит (пару строк кода), а проверку на количество символов я обычно модулями CMS делаю (чтобы форма не отправлялась с неполным номером). Так же можно прямо средствами HTML проверять, импуту укажите
minlength="13"
.Спасибо, очень удобно что без сторонних библиотек используется!
Пожалуйста, пользуйтесь)
Здравствуйте, если использовать автозаполнение на ios, то номер не полностью стирается. Багует с номером вида +7 (000) 000-00-00
Здравствуйте. Поправил в коде 2 строчки. Теперь код должен корректно стирать номер телефона при использовании автозаполнения на iOS. На данный момент нет девайсов на iOS чтобы проверить. Посмотрите на демо.
все ок, но как решить проблему, что при редактировании номера новые символы печатаются в конце строки, а не на месте старых? при этом, с последними 4 символами все ок
alert(‘воу’)
Здравствуйте. Подскажите, пожалуйста, а как сделать, чтобы +7 не выводилось сразу при клике по полю инпута, а только при вводе первой цифры? Например, кликаю по полю — ничего не выводится. Набираю на клавиатуре цифру 8 или любую другую цифру — выводится +7
Спасибо! Изучаю JS, и Ваш скрипт очень помогает узнать что-то новое.
Пожалуйста)
Спасибо! На лендинге форма в шапке работает.
Если не сложно, ответьте, пожалуйста.
Вопросы:
1. На popup при подключенных файлах скриптов перестала вообще отправляться форма, хотя и пишет, что ОТПРАВЛЕНО
2. Как бы сделать еще проверку на ПОЛНОСТЬЮ введенный телефон, чтобы пользователи не могли 3 символа по маске отправить.
Ну как вариант, попробуйте так:
Спасибо!