маска для ввода номера телефона чистый javascript

123
12 декабря 2019, 04:00

помогите написать маску такого формата +7 (999) 999-99-99 без стороних библиотек

нужно чтобы символы ')', '(', '-', '-' нельзя было удалить, и чтобы курсор в инпут был в позиции

Answer 1

Проще всего скриптом создать несколько input-ов.
Можно добавить и навигацию стрелками по строке, а также автоматический фокус при вводе цифр, но для примера и этого хватит.

function createText ( text ) { 
    var t = document.createElement( 'span' ); 
    t.textContent = text; 
    t.style.width = text.length.toString() + 'em'; 
    t.style.height = '100%'; 
    t.style.textAlign = 'center'; 
    return t; 
} 
 
function createInput ( n ) { 
    var i = document.createElement( 'input' ); 
    i.type = 'text'; 
    i.__reg = new RegExp( '^\\d{0,' + n + '}$' ); 
    i.value = i.__oldValue = ''; 
    i.style.border = 'none'; 
    i.style.width = n.toString() + 'em'; 
    i.style.height = '100%'; 
    i.style.textAlign = 'center'; 
    i.style.outline = 'none'; 
    i.addEventListener( 'input', input ); 
    return i; 
} 
 
function input () { 
    if ( !this.__reg.test( this.value ) ) { 
        this.value = this.__oldValue; 
    } 
    else { 
        this.__oldValue = this.value; 
    } 
} 
 
 
var tel = document.getElementById( 'tel' ); 
 
// маска для ввода номера 
[ '+7(', 3, ')', 3, '-', 2, '-', 2 ].forEach( function ( i ) { 
    typeof i === 'string' ? tel.appendChild( createText( i ) ) : tel.appendChild( createInput( i ) ); 
} );
<div id="tel" style="display: inline-block; height: 20px; width: auto; border: 1px solid #607D8B;"></div>

READ ALSO
найти навешенный обработчик

найти навешенный обработчик

Имеем элемент с навешенным на нём обработчиком $(el)on('click', function() {/* содержимое анонимной функции */}), как найти этот обработчик в мозиле event не указывает...

134
Плавное перемещение меню сайта

Плавное перемещение меню сайта

Я пытаюсь сделать такой же эффект как у bootstrap когда листаешь страничку вверх-вниз и меню, которое находится вверху, перемещается вместе со скроллированием

144
MySQL NULL ошибка запроса SELECT

MySQL NULL ошибка запроса SELECT

Всем привет, пишу парсер расписанияБывают ситуации когда нету у занятия учителя

122
Скорость медленная очень. MySQL база

Скорость медленная очень. MySQL база

Установил Xampp и стартанул через MySQL serverЕсть база, таблицы в форматах *

117