@danilr

Как затирать цифру 8 при вводе в инпут с маской?

Использую плагин маску для ввода номера телефона https://imask.js.org/guide.html#masked-base
Применяю так -
document.addEventListener('DOMContentLoaded', () => {
    document.querySelectorAll('[data-role="imask-phone"]').forEach((item) => {
        // item.placeholder = '+7 (___) ___-__-__';
        item.addEventListener('focus', (e)=> {
            if(e.target.value == '') {
                item.value = '+7 ('
                console.log('item.value: ', item.value);
            }
        })
        IMask(item, {
            mask: '+{7} (000) 000-00-00',
            strict: true,
        });
    })
});

Нужно было чтобы при фокусе на инпут сразу вводилось "+7".
Вот и теперь нужно, чтобы при вводе следующей 8 - он её затирал либо не давал вводить. Пытался через добавления обработчик на инпут затерать 8, но маска тогда с ума сходит и неправильно работает.
В документации написано что можно как-то через регулярку сделать. Помогите пожалуйста, кто в них разбирается?
  • Вопрос задан
  • 2544 просмотра
Решения вопроса 1
ReaverJS
@ReaverJS

Но прям вообще не юзер френдли.

Лучше через dispatch - подстраивать маску под +7 или 8 соответственно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Здесь подойдёт использование prepare для трансформации текста перед применением маски. Я в примере отправляю пустую строку, чтобы в поле ввода оказалась и скобочка. Но можно вернуть и 7. Для текущей маски это отличный вариант

IMask(input, {
    mask: '+{7} (000) 000 0000',
    prepare: function (appended, masked) {
      if (appended === '8' && masked.value === '') {
        return '';
      }
      return appended;
    },
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы