Search code examples
javascriptjqueryinputonclicknumpad

count characters in input field and then submit


I want to make a "NumPad" where I can type in a 4-digit-keycode in an input field. After I click the four buttons, the submit-button gets pressed. I found a few code-snippets and it worked if I use the keyboard. This is how far I come:

function addNum(num){
    document.getElementById('login').value += num;
}
$('#login').keyup(function(){
    if(this.value.length == 4){
        $('#enter').click();
    }
});
#numpad {
  width: 200px;
}

.row {
  width: 100%;
}

.number {
  min-width: 26%;
  height: 60px;
  float: left;
  border: 1px solid;
  margin: 10px;
  vertical-align: middle;
  display: block;
  font-size: 2em;
  padding-top: 8px;
  padding-left: 30px;
  -webkit-border-radius: 15px;
  -moz-border-radius: 15px;
  border-radius: 15px;
}

a:hover .number {
  background: black;
  color: white;
}
<form action="action.php" method="post" name="loginform" id="loginform">
  <input type="password" class="form-control" name="login" id="login">
  <input type="submit" id="enter" value="Submit">
</form>
<div id="numpad">
  <div class="row">
    <a href="#" onClick="addNum('1');"><div class="number">1</div></a>
    <a href="#" onClick="addNum('2'); return false"><div class="number">2</div></a>
    <a href="#" onClick="addNum('3'); return false"><div class="number">3</div></a>
  </div>
  <div class="row">
    <a href="#" onClick="addNum('4'); return false"><div class="number">4</div></a>
    <a href="#" onClick="addNum('5'); return false"><div class="number">5</div></a>
    <a href="#" onClick="addNum('6'); return false"><div class="number">6</div></a>
  </div><div class="row">
    <a href="#" onClick="addNum('7'); return false"><div class="number">7</div></a>
    <a href="#" onClick="addNum('8'); return false"><div class="number">8</div></a>
    <a href="#" onClick="addNum('9'); return false"><div class="number">9</div></a>
  </div>
</div>


Solution

  • Add your submit check to your addNum() function:

    function addNum(num)
    {
        document.getElementById('login').value += num;
        if((document.getElementById('login').value.length == 4) && document.getElementById('login').value.match(/^\d{4}$/))
        {
            alert("Form Submitted");
            document.forms["loginform"].submit();
        }
    }
    $('#login').keyup(function() {
        if((this.value.length == 4) && document.getElementById('login').value.match(/^\d{4}$/))
        {
            alert("Form Submitted");
            document.forms["loginform"].submit();
        }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <form action="action.php" method="post" name="loginform" id="loginform">
      <input type="password" class="form-control" name="login" id="login">
      <input type="submit" id="enter" value="Submit">
    </form>
    <div id="numpad">
      <div class="row">
        <a href="#" onClick="addNum('1');"><div class="number">1</div></a>
        <a href="#" onClick="addNum('2');"><div class="number">2</div></a>
        <a href="#" onClick="addNum('3');"><div class="number">3</div></a>
      </div>
      <div class="row">
        <a href="#" onClick="addNum('4');"><div class="number">4</div></a>
        <a href="#" onClick="addNum('5');"><div class="number">5</div></a>
        <a href="#" onClick="addNum('6');"><div class="number">6</div></a>
      </div><div class="row">
        <a href="#" onClick="addNum('7');"><div class="number">7</div></a>
        <a href="#" onClick="addNum('8');"><div class="number">8</div></a>
        <a href="#" onClick="addNum('9');"><div class="number">9</div></a>
      </div>
    </div>

    You may want to validate that it is actually a 4-digit number using regex:

    document.getElementById('login').value.match(/^\d{4}$)
    

    The form submission is blocked here that is why I put the alert in...