Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Focus next input once reaching maxlength value

How can I focus the next input once the previous input has reached its maxlength value?

a: <input type="text" maxlength="5" /> b: <input type="text" maxlength="5" /> c: <input type="text" maxlength="5" /> 

If a user pastes text that is greater than the maxlength, ideally it should spill into the next input.

jsFiddle: http://jsfiddle.net/4m5fg/1/

I must stress that I do not want to use a plugin, as I'd much rather learn the logic behind this, than use something that already exists. Thanks for understanding.

like image 436
O P Avatar asked Mar 24 '13 05:03

O P


People also ask

How do you know if input field is focused?

To check if an input field has focus with JavaScript, we can use the document. activeElement property to get the element in focus. to add an input. to check if the input element is focused.


1 Answers

No jQuery used and is a very clean implementation:

  • Reads from the maxlength attribute.
  • Scales to any number of inputs inside of your container.
  • Automatically finds the next input to focus.
  • No jQuery.

http://jsfiddle.net/4m5fg/5/

<div class="container"> a: <input type="text" maxlength="5" /> b: <input type="text" maxlength="5" /> c: <input type="text" maxlength="5" /> </div> 

..

var container = document.getElementsByClassName("container")[0]; container.onkeyup = function(e) {     var target = e.srcElement || e.target;     var maxLength = parseInt(target.attributes["maxlength"].value, 10);     var myLength = target.value.length;     if (myLength >= maxLength) {         var next = target;         while (next = next.nextElementSibling) {             if (next == null)                 break;             if (next.tagName.toLowerCase() === "input") {                 next.focus();                 break;             }         }     }     // Move to previous field if empty (user pressed backspace)     else if (myLength === 0) {         var previous = target;         while (previous = previous.previousElementSibling) {             if (previous == null)                 break;             if (previous.tagName.toLowerCase() === "input") {                 previous.focus();                 break;             }         }     } } 
like image 100
Joseph Lennox Avatar answered Sep 18 '22 15:09

Joseph Lennox