Как разбить текст по нескольким инпутам?

335
21 июля 2017, 05:30

Есть 3 инпута с ограничением максимальной длины. Как автоматически разбивать вставляемый в первый инпут текст на 3 инпута по 3 знака в каждом?

Answer 1

// Получаем список input 
var els__inputs = document.querySelectorAll('.input'); 
 
var int__maxSimbols = 3; // Максимальное количество символов 
 
// Запускаем перебор всех input 
els__inputs.forEach(function (el__input, int__input) { 
  el__input.addEventListener('input', function (e) { 
    if (this.value.length >= int__maxSimbols) { 
      var str__value = this.value, 
          int__inputLength = els__inputs.length - int__input; 
       
      str__value = str__value.substring(0, int__maxSimbols * int__inputLength); 
       
      // Разбиваем текст на несколько полей 
      for (var i = 0; i < els__inputs.length - int__input; i++) { 
        var el__selectElement = els__inputs[int__input + i]; 
         
        // Обрезаем от общей строки нужное количество символов 
        // Алгоритм я расписать не могу, т.к. сам его не очень понимаю :D 
        if (el__selectElement.value === '') el__selectElement.value = str__value.substring(int__maxSimbols * i, int__maxSimbols * int__inputLength * (i + 1)); 
        el__selectElement.value = el__selectElement.value.substring(0, 3); 
      }; 
       
      // Ищем следущий элемент, который нужно фокусировать 
      var int__idxNextElement = Math.ceil(str__value.length / int__maxSimbols) - 1 + int__input; 
       
      els__inputs[int__idxNextElement].focus(); 
    }; 
  }); 
  // Сделаем ещё переход на предыдущее поле по нажатие Backspace 
  el__input.addEventListener('keydown', function (e) { 
    if (e.keyCode === 8 && el__input.value.length === 0 && int__input !== 0) { 
      els__inputs[int__input - 1].focus(); 
    }; 
  }); 
});
<input type="text" class="input"> 
<input type="text" class="input"> 
<input type="text" class="input">

READ ALSO
Меню, вложенное в массив

Меню, вложенное в массив

Подскажите, нужно создать js-объект, состоящий из пунктов меню, у каждого пункта может быть родитель, те

258
Передвижение по svg (path)

Передвижение по svg (path)

Подскажите, пожалуйста, как организовать движение картинок по path "паровозиком", как угодно, только не друг на друге (задать координаты в цикле...

303
Сравнение 2х массивов

Сравнение 2х массивов

Всем привет, Имеется задача сравнить 2 массива и вывести результат с отсутствующим ID/

222
Проигнорированный флаг JavaScript

Проигнорированный флаг JavaScript

В простом тексте вздумалось мне найти буквосочетания:

347