// если первый символ не тот, прилепить его в начале
const keepPlus = event => {
const symbol = '+';
const {target} = event; // const target = event.target;
if (target.value[0] !== symbol) {
target.value = symbol + target.value;
}
}
// проверять при любом изменении
document.querySelectorAll('input[type=text]')
.forEach(el => el.addEventListener('input', keepPlus));
Здесь недостаток – помимо начального плюсика все прочие хотелки игнорируются. Например, юзер введёт ещё сотню плюсиков после первого, номер из всего 2 цифр и забудет указать код города. Юзеры они такие.
Вообще лучше
посмотрите на
input type="tel"
и его атрибут
pattern
.
Песочница.
а что UX?С точки зрения пользовательского опыта, не факт, что непредсказуемый запрет на некие действия это хорошее решение. Может, лучше разрешить вводить как угодно, и потом уметь правильно это истолковать?
Если забыл код страны или города – взять из его геолокации; Ввёл одни цифры – молодец. Навставлял дефисов, точек и пробелов как разделителей, скобками выделил некоторые фрагменты – да и ладно – всё удалить, хранить только цифры. При выводе форматировать по-своему.