Detectar cuadro de texto de entrada modificado

Resuelto asked hace 13 años • 11 respuestas

Revisé muchas otras preguntas y encontré respuestas muy simples, incluido el siguiente código. Simplemente quiero detectar cuando alguien cambia el contenido de un cuadro de texto pero por alguna razón no funciona... No obtengo errores de consola. Cuando configuro un punto de interrupción en el navegador en la change()función, nunca lo alcanza.

$('#inputDatabaseName').change(function () { 
    alert('test'); 
});
<input id="inputDatabaseName">
 avatar May 27 '11 20:05
Aceptado

Puedes usar el inputevento Javascript en jQuery de esta manera:

$('#inputDatabaseName').on('input',function(e){
    alert('Changed!')
});

En JavaScript puro:

document.querySelector("input").addEventListener("change",function () {
  alert("Input Changed");
})

O así:

<input id="inputDatabaseName" onchange="youFunction();"
onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();"/>
Ouadie avatar Mar 29 '2013 16:03 Ouadie

Pruebe con la tecla en lugar de cambiar.

<script type="text/javascript">
   $(document).ready(function () {
       $('#inputDatabaseName').keyup(function () { alert('test'); });
   });
</script>

Aquí está la documentación oficial de jQuery para .keyup() .

Scott Harwell avatar May 27 '2011 13:05 Scott Harwell

A cada respuesta le faltan algunos puntos, así que aquí está mi solución:

$("#input").on("input", function(e) {
  var input = $(this);
  var val = input.val();

  if (input.data("lastval") != val) {
    input.data("lastval", val);

    //your change action goes here 
    console.log(val);
  }

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
<p>Try to drag the letters and copy paste</p>
Expandir fragmento

Los Input Eventdisparos al ingresar con el teclado , arrastrar el mouse , completar automáticamente y copiar y pegar se probaron en Chrome y Firefox. Verificar el valor anterior hace que detecte cambios reales, lo que significa no disparar al pegar lo mismo o escribir el mismo carácter, etc.

Ejemplo de trabajo: http://jsfiddle.net/g6pcp/473/


actualizar:

Y si desea ejecutar change function solo cuando el usuario termine de escribir y evitar que se active la acción de cambio varias veces, puede intentar esto:

var timerid;
$("#input").on("input", function(e) {
  var value = $(this).val();
  if ($(this).data("lastval") != value) {

    $(this).data("lastval", value);
    clearTimeout(timerid);

    timerid = setTimeout(function() {
      //your change action goes here 
      console.log(value);
    }, 500);
  };
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
Expandir fragmento

Si el usuario comienza a escribir (por ejemplo, "foobar"), este código evita change actionque se ejecute para cada letra que escribe el usuario y solo se ejecuta cuando el usuario deja de escribir. Esto es bueno especialmente para cuando envía la entrada al servidor (por ejemplo, entradas de búsqueda), que forma en que el servidor realiza solo una búsqueda foobary no seis búsquedas de fy luego foy luego fooy foobasí sucesivamente.

azerafati avatar Apr 24 '2014 10:04 azerafati