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>
Los Input Event
incendios en la entrada del teclado , el arrastre del mouse , el autocompletado y el 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 al escribir el mismo carácter, etc.
Ejemplo de trabajo: http://jsfiddle.net/g6pcp/473/
actualizar:
Y si desea ejecutar su change function
solo cuando el usuario termina de escribir y evita disparar 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">
Si el usuario comienza a escribir (por ejemplo, "foobar"), este código evita change action
que se ejecute para cada letra que escribe el usuario y solo se ejecuta cuando el usuario deja de escribir, esto es especialmente útil cuando envía la entrada al servidor (por ejemplo, buscar entradas), que servidor de manera que lo hace sólo una búsqueda de foobar
y no seis búsquedas para f
y luego fo
y luego foo
y foob
etcétera.