Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 4 Diciembre 2019, 14:15 pm



Título: [Pregunta]: Detectar cambió en un input en especifico (JS)
Publicado por: Leguim en 4 Diciembre 2019, 14:15 pm
Buenos días,

tengo un formulario ("id_form") en el cual tengo 2 inputs uno que tiene name="username" y name="pass"

Código
  1.        $('#id_form').on('change',function() // detecto si se produjo un cambio en el formulario entero
  2.        {
  3.            if(id_form.input_username.onchange) // quiero que si el cambio se produjo en el input username
  4.            {
  5.                alert('1');
  6.            }
  7.            else if(id_form.input_pass.onchange) // quiero que si el cambio se produjo en el input pass
  8.            {
  9.                alert('2');
  10.            }
  11.        });
  12.  

Como esta el código no da errores pero tampoco sirve, no hace nada.
Probé de otras maneras pero tampoco me servían porque me daban errores, quiero hacerlo de esta manera para no tener que estar poniendo una id="" a cada campo o un onchange, es muy tedioso y prefiero hacerlo así...


Título: Re: [Pregunta]: Detectar cambió en un input en especifico (JS)
Publicado por: MinusFour en 4 Diciembre 2019, 16:34 pm
El elemento que dispara el evento se encuentra ubicado en la propiedad target del objeto de evento que por lo general (sino es que siempre) es pasado como primer argumento al listener.

Código
  1. $('#id_form').on('change',function(e){
  2. ...
  3. });

Puedes simplemente comparar si el target es el elemento que estás buscando:

Código
  1. $('#id_form').on('change',function(e){
  2.    if($('#input_username').is(e.target)){
  3.  
  4.    }
  5.    else if($('#input_pass').is(e.target)) {
  6.  
  7.    }
  8. });

Edit: Todavía tienes que poner un id o una clase para seleccionar esos campos. Podrías hacerlo también por indice pero es preferible poner alguna clase de identificador.


Título: Re: [Pregunta]: Detectar cambió en un input en especifico (JS)
Publicado por: EdePC en 4 Diciembre 2019, 16:52 pm
Saludos,

- Cierto, pero él no quiere usar ID XD. En ese caso comprueba la propiedad/atributo name directamente, a mi me funciona lo siguiente:

Código
  1. <script src="jquery-3.4.1.js"></script>
  2.  
  3. <form id="id_form">
  4.  <input type="text" name="username">
  5.  <input type="password" name="pass">
  6. </form>
  7.  
  8. <script>
  9.  $("#id_form").change(function(e) {
  10.    if ( e.target.name === "username" ) {
  11.      console.log("username change");
  12.    } else if ( e.target.name === "pass" ) {
  13.      console.log("password change");
  14.    }
  15.  });
  16. </script>

- Sin embargo aclarar los ShortCuts, por ejemplo:
$(document).ready(function(){...}) es lo mismo que $(function(){...}) y
$("css_selector").on("event", function(){...}) es lo mismo que $("css_selector").event(function(){...}). En la documentación de jQuery se ve todo esto y lo normal es ver los ShortCuts ya que jQuery es para escribir menos.

- También habría que considerar de que el evento change se dispara solo cuando se pierde el foco (onblur) del elemento, en este caso el input type="text" o "password", puedes usar el código que puse antes para probarlo y ver que sucede teniendo la consola abierta al costado por supuesto.


Título: Re: [Pregunta]: Detectar cambió en un input en especifico (JS)
Publicado por: Leguim en 4 Diciembre 2019, 17:04 pm
O.O WOAO lo acabo de hacer me leiste la mente jaja

Código
  1.            if($('input[name=input_email]').is(e.target))
  2.            {
  3.                alert('input_email');
  4.            }
  5.            else if($('input[name=input_password]').is(e.target))
  6.            {
  7.                alert('input_password');
  8.            }
  9.  

¡Muchas gracias a los dos!