llamar a función ajax al presionar tecla enter

Iniciado por proteus8, 5 Enero 2021, 23:55 PM

0 Miembros y 1 Visitante están viendo este tema.

proteus8

Hola a todos!! tengo un problema con una función javascript, resulta que en mi pagina tengo un text y un botón, al presionar el botón se ejecuta la función javascript la que envía datos de un formulario a un controlador de laravel, esto funciona sin problemas , pero necesito que también se ejecute la función si el usuario presiona la tecla enter cuando esta en el text, no se como hacerlo ya que si ahora lo presiono me da un error indicando que envié valores vacíos a la función.

esta es mi función
Código (javascript) [Seleccionar]

function temporal(ruta)
{
   const codigobarra=$('#Txt_serie').val();
   const sku_ext=$('#Txt_codigo').val();
   const Idservicio=$('#Txt_servicio').val();
   const Numguia=$('#Txt_numguia').val();
   const Idmaterial=$('#Txt_idmaterial').val();
   const Idproveedor=$('#Txt_prov').val();
   const Numcantidad=$('#Txt_cant').val();
   const identificador=$('#Txt_identificador').val();
   const Numfila=$('#Txt_fila').val();
   const usuario=$('#Txt_user').val();
   const estado=1;
   
    $.ajax(
        {
            url:ruta,
            type:'POST',
            data: {
                _token:$('input[name="_token"]').val(),
                temp_mat_id:Idmaterial,
                tem_mst_id:estado,
                temp_ser_id:Idservicio,
                temp_serie:codigobarra,
                temp_guia:Numguia,
                temp_pro_id:Idproveedor,
                temp_identificador:identificador,
                temp_nwa_id:1,
                temp_use_id:usuario
            },
            success:function () {
                           document.getElementById("respuesta").innerHTML=`<div class="alert alert-danger" role="alert">OK</div>`
                  document.getElementById('Txt_serie').value= "";
                  $('#Txt_serie').focus();
                }
               
         });
       
         return false;
         
   
}


Código (html4strict) [Seleccionar]

{{-- este el text que no logro que me funcione al presionar enter --}}

<input type="text" name="Txt_serie" id='Txt_serie' placeholder="0"  class="form-control">

{{-- este el tbotón que llama a la función--}}

<button name="Btn_agregar" id="Btn_agregar" type="button" onclick="temporal('{{ route('guiaingresos.insert') }}')"   class="btn btn-info">Agregar</button>


espero me puedan ayudar.

EdePC

Hay dos opciones, una es poner el tipo de botón a submit que es el estándar para formularios y reacciona al Enter enviando el formulario, entonces tendrías que quitarle ese evento onclick y pasárselo al evento onsubmit del formulario, ya que cuando una da click en el botón de tipo submit de un formulario o presiona Enter estando dentro de él, automáticamente se ejecuta el evento onsubmit del formulario. Pero para evitar que el formulario "se envíe", se actualice la página y te vacíe los datos, hay que poner un preventDefault() al final de la función:

Código (html4strict) [Seleccionar]
<form onsubmit="myFunction()">
  Enter name: <input type="text">
  <input type="submit">
</form>

<script>
  function myFunction() {
    console.log('Hello')
    event.preventDefault()
  }
</script>


La otra forma es añadir el evento onkeyup o onkeypress al formulario o body para verificar si se a presionado el Enter y mandar a hacer lo mismo que hacia el onclick del botón. Me parece que había otra forma pero no la recuerdo bien XD

proteus8

@EdePC  excelente!!! funciono muchas gracias master.  ;-) ;-) ;-)