Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.02.2020, 15:44
Новичок на форуме
Отправить личное сообщение для TrueLie Посмотреть профиль Найти все сообщения от TrueLie
 
Регистрация: 07.02.2020
Сообщений: 2

Дополнительная проверка в маске телефона на семерку
Здравствуйте.

Текущий код в целом устраивает и работает корректно, но хотелось бы немного его облагородить, добавив дополнительную проверку на цифру 7 вначале строки. Т.е. если 7, то «+» перед ней, если другие, то ничего.

Также напрягает отсутствие возможности заменять выделение простым нажатием цифр. Сейчас только стирать и потом вводить заново.

<input type="tel" name="phone" placeholder="Контактный телефон" class="i_phone">
<script>
var phoneInput = document.querySelectorAll(".i_phone");
for(var i=0; i < phoneInput.length; i++){
phoneInput[i].addEventListener("keydown", function(e) {
  "ArrowLeft" != e.key && "ArrowRight" != e.key && "Backspace" != e.key && "Delete" != e.key && "Tab" != e.key && e.preventDefault();
  var t = "+1 (111) 111-11-11";
  if (/[0-9\+\ \-\(\)]/.test(e.key)) {
    var a = this.value,
      n = a.length;
     if(n>0 && e.key=='+');
     
    else if (/[0-9+]/.test(e.key)){
      if ("1" == t[n]) 
        this.value = a + e.key;
      else if ("+" == t[n]) 
        {
            this.value = a + e.key;      
        }
      else if ("+" != t[n]) 
      {
      
          for (var r = n; r < t.length; r++) {
            if ("1" == t[r]) {
              this.value = a + e.key;
              break
            }
            a += t[r]
          }
       }
       
      if(this.value.length==1 && this.value!="+")
      {
        this.value="+"+this.value;
      }
    }   
  }
});
}
</script>


Буду благодарен за любую помощь в решении вопроса)
Ответить с цитированием
  #2 (permalink)  
Старый 07.02.2020, 17:11
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

TrueLie,

1) заменить событие "keydown" на событие "input", чтобы всякие там вставки из буфера работали, и вообще.

2) для работы с выделенным куском текста курить https://learn.javascript.ru/selection-range или что-то вроде того
запоминать текущее выделение, потом возвращать, там несколько кейсов.

3) c +7 даже не знаю что сказать. Учитывая, что пп 1 и 2 предполагают рефакторинг с ног на голову, +7 пока вообще не на чем делать


----
в целом, лучше либо взять готовый компонент, либо посмотреть как там устроен обработчик "input"
Ответить с цитированием
  #3 (permalink)  
Старый 07.02.2020, 18:05
Новичок на форуме
Отправить личное сообщение для TrueLie Посмотреть профиль Найти все сообщения от TrueLie
 
Регистрация: 07.02.2020
Сообщений: 2

Alexandroppolus,

спасибо за ответ.

1. Вставки не нужны.
2. Спасибо, изучаю.
3. А жаль, это самое важное, что хотелось бы)
Ответить с цитированием
  #4 (permalink)  
Старый 07.02.2020, 18:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

TrueLie,
на всякий случай https://javascript.ru/forum/dom-wind...tml#post421348
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дополнительная проверка введения телефона Igorsrt Элементы интерфейса 27 06.02.2019 02:23
Проверка поля для телефона. ureech Элементы интерфейса 0 20.04.2016 21:17
Проверка поля номера телефона iskander83 Общие вопросы Javascript 2 14.05.2013 15:22
Проверка номера телефона при помощи регулярок Amateur Javascript под браузер 3 20.10.2011 13:34
Проверка поля Номер телефона zhuzha Общие вопросы Javascript 7 12.05.2010 16:40