All keys work as enter

12

I'm developing a small system in PHP where the user just passes a badge and press enter. Somehow I need to make this enter automatic after a few seconds (the button is already in the focus after filling in the field) or when passing the badge again (only numbers) the system means an enter. Is it possible?

I'm trying to adapt this function that blocked all letters for this case:

function SomenteNumero(e){
   var tecla = (window.event) ? event.keyCode : e.which;

   if((tecla > 47 && tecla < 58))
       return true;
   else{
       if (tecla == 8 || tecla == 0)
           return true; 
       else 
           return false; 
   } 
}
    
asked by anonymous 24.08.2015 / 19:52

2 answers

7

I understood your question this way:

How to automate the submission of a form after autocompletion of a field?

Monitor KeyDown and KeyUp events, and after a few seconds of inactivity validate the typed content.

    var temporizador;                
    var intervalotemporizador = 2000;  //tempo em milissegundos. Neste caso, 2s.
    var $input = $('#campoCodigo');
    
    //Quando uma tecla for liberada no campoCodigo, iniciar temporizador:
    $input.on('keyup', function () {
      clearTimeout(temporizador);
      temporizador = setTimeout(avaliarConteudoDigitado, intervalotemporizador);
    });
    
    //Quando uma tecla for pressionada, limpar o temporizador:
    $input.on('keydown', function () {
      clearTimeout(temporizador);
    });
    
    //quando o usuário finalizar a 'digitação':
    function avaliarConteudoDigitado () {
      //Faça algo aqui - valide o código, mostre comentários, e ao final submeta o formulário:
      
      //document.getElementById("meuForm").submit();
      
      var valor = $input.val(); 
      
      if (isNaN(valor)) //isNaN: Is Not a Number (verifica se o valor não é numérico)
        $('#mensagem').val('ERRO: Não numérico.');
      else
      if (valor.length != 10)
        $('#mensagem').val('ERRO: Número de caracteres diferente de 10.');
      else
        $('#mensagem').val('OK.');
      
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='campoCodigo' />

<input type='text' id='mensagem' />

function when user finishes typing instead of on key up? ', SO Original .

    
24.08.2015 / 20:20
6

You can check the size of the field value, if it is the size of the badge number, send the form, eg:

function SomenteNumero(e){
   var tecla = (window.event) ? event.keyCode : e.which;

   if((tecla > 47 && tecla < 58))
       return true;
   else{
       if (tecla == 8 || tecla == 0)
           return true; 
       else 
           return false; 
   } 
}

$(document).on('keyup change', '#numero', function(event){
  event.preventDefault();
  
  var res = SomenteNumero(event);
  
  
  var len = this.value.length;
  
  if (len < 10 && !res) return res;
  
  if (len == 10){
    $(this).prop('readonly', true);
    $('#teste').submit();
  }
  
});


$(document).on('submit', '#teste', function(event){
  event.preventDefault();
  alert('Form "enviado", SQN!');
  $('#numero').prop('readonly', false);
});
[readonly]{
background-color: #CCC;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><formid="teste">
  <input type="text" name="numero" id="numero">
 </form>
    
24.08.2015 / 20:39