javascript - una - obtener valor de un input jquery
¿Cómo puedo obtener jquery.val() DESPUÉS de presionar tecla evento? (6)
Tengo:
$(someTextInputField).keypress(function() {
alert($(this).val());
});
Ahora la alerta siempre devuelve el valor ANTES de la pulsación de tecla (por ejemplo, el campo está vacío, escribo ''a'' y la alerta me da ''''. Luego escribo ''b'' y la alerta me da ''a'' ...). Pero quiero el valor DESPUÉS de la pulsación de la tecla, ¿cómo puedo hacer eso?
Antecedentes: me gustaría habilitar un botón tan pronto como el campo de texto contenga al menos un carácter. Así que ejecuto esta prueba en cada evento de pulsación de tecla, pero utilizando el valor devuelto () el resultado siempre está un paso atrás. Usar el evento change () no es una opción para mí porque el botón se desactiva hasta que salga del cuadro de texto. Si hay una mejor manera de hacerlo, me alegra oírlo.
Alternativamente, puede usar el evento de tecla con un tiempo de espera de 0.
De esta forma, los cambios se aplicarán de forma instantánea, en lugar de aplicarse cuando el usuario deja de presionar la tecla.
$(someTextInputField).on("keydown", function() {
setTimeout(function($elem){
alert($elem.val());
}, 0, $(this));
});
Cambiar la keypress
keyup
para la keypress
$(someTextInputField).on("keyup", function() {
alert($(this).val());
});
keypress
se dispara cuando se presiona la tecla hacia abajo, la keyup
se dispara cuando se suelta la tecla.
Es posible que desee conectar un onchange
eventos onchange
lugar de utilizar cualquiera de los eventos clave.
$(someTextInputField).change(function() {
alert($(this).val());
});
Usando Edit > Paste
o un clic derecho, Pegar activará un evento de cambio, pero no un evento clave. Tenga en cuenta que algunos navegadores pueden simular un evento clave en un pegado (aunque no conozco ninguno) pero no puede contar con ese comportamiento.
Pruebe algo como esto:
$(''#someField'').keypress(function() {
setTimeout(function() {
if ($(''#someField'').val().length > 0)
$(''#theButton'').attr(''disabled'', false);
}, 1);
});
Eso simplemente introduce un tiempo de espera para que luego de que se complete el ciclo de evento de "pulsación de tecla", su código se ejecutará casi inmediatamente después. Un intervalo de temporizador tan corto (incluso si es redondeado por el navegador) no se notará.
editar - o podría usar "keyup" como todos los demás dicen, aunque su semántica es diferente.
Sorprendido de que nadie mencionó el evento de "entrada" js:
$(someTextInputField).on(''input'', function() {
alert($(this).val());
});
Recomendado.