Detectar cuadro de texto de entrada modificado
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">
Puedes usar el input
evento 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();"/>
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() .
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
disparos 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">
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 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 foobar
y no seis búsquedas de f
y luego fo
y luego foo
y foob
así sucesivamente.