Переход по input javascript

296
06 июля 2017, 00:20

Всем привет, не получается одна задачка есть 3 input'а нужно что бы при вводе в первый трёх символов focus переходил на другой input так же и при вводе во второй переходило на третий. И то же самое с удалением из них т.е. если я удалил все символы с 3 input фокус перешел на второй, а при удалении со второго на первый

<form> 
    <input type="text" id="inp1"  maxlength="3"  size="3"> 
    <input type="text" id="inp2"  maxlength="3"  size="3"> 
    <input type="text" id="inp3"  maxlength="4"  size="4"> 
    
</form>

Answer 1

Каждый раз формируем строку и раскидываем по инпутам.
Вероятно, не будет работать на iOS из-за вызова inp.focus().
Желательно добавить обработку стрелок.
Желательно добавить обработку Delete и Backspace в конце и начале поля соответственно.

document.querySelector('form').addEventListener('input', function (e) { 
  var inp = event.target; 
  var inps = this.querySelectorAll('input'); 
  var value = Array.prototype.map.call(inps, x => x.value).join(''); 
  var i = +inp.dataset.start + inp.selectionStart, pos = value.length; 
   
  for (var q=0; q<inps.length; ++q) { 
    var start = +inps[q].dataset.start, len = +inps[q].dataset.len; 
    inps[q].value = value.substr(start, len); 
     
    if (start + len >= i) { 
      inp = inps[q]; 
      pos = i - start; 
      i = NaN; 
    } 
  } 
   
  inp.focus(); 
  inp.selectionStart = inp.selectionEnd = pos; 
})
<form> 
  <input type="text" name="inp" data-start="0" data-len="3" size="3"> 
  <input type="text" name="inp" data-start="3" data-len="3" size="3"> 
  <input type="text" name="inp" data-start="6" data-len="4" size="4"> 
</form>

Answer 2

function jmp(e){ 
    var max = ~~e.getAttribute('maxlength'); 
    if(max && e.value.length >= max){ 
        do{ 
            e = e.nextSibling; 
        } 
        while(e && !(/text/.test(e.type))); 
        if(e && /text/.test(e.type)){ 
            e.focus(); 
        } 
    } 
}
<div> 
  <p>Введите серийный номер</p> 
    <input type="text" onkeyup="jmp(this);" maxlength="5" size="5">- 
    <input type="text" onkeyup="jmp(this);" maxlength="4" size="4">- 
    <input type="text" onkeyup="jmp(this);" maxlength="7" size="7">- 
    <input type="text" onkeyup="jmp(this);" maxlength="5" size="5"> 
</div>

READ ALSO
bootstrap и css &lt;a&gt;

bootstrap и css <a>

Решил поучить bootstrapДелал по примеру на видео

263
На чем может базироваться это сайт? [требует правки]

На чем может базироваться это сайт? [требует правки]

Искал в англоязычном интернете, но так и не нашел ничего внятногоНадеюсь здесь найдутся знающие люди

197
Форма редактирования на JS [требует правки]

Форма редактирования на JS [требует правки]

Как сделать HTML форму ввода текста, в которой при введении слова с хештегом (например #text) это слово будет менять цвет на голубой, прямо в форме,...

161