Pregunta

Quiero que se ejecute una función cuando se presione una tecla en un cuadro de texto, por lo que tengo este código:

$("input[x]").keypress(function() {
        DoX();
    })

Esto funciona bien, pero en mi función quiero hacer algo basado en el valor del texto en el cuadro de texto

var textValue = ("input[x]").val();

El problema aquí es que se retrasa con una clave, por lo que si mi cuadro de texto dice 'He' y escribo una 'l', quiero que mi valor de texto sea 'Hel', pero está devolviendo el valor anterior 'Él' porque probablemente el personaje aún no se ha puesto en el cuadro de texto.

¿Hay alguna forma de que 'Hel' salga de mi función aquí?

Gracias :)

¿Fue útil?

Solución

Puedes intentar usar el evento keyup:

$(selector).keyup(function() {
  var textValue = $(this).val();
  DoX();
});

Otros consejos

Si se queda atascado con la tecla presionada por alguna otra razón (por lo que no puede cambiar a la tecla de teclado como se sugiere), puede obtener el último carácter escrito así:

$("input[x]").keypress(function (e) {
    var c = String.fromCharCode(e.which);
    //process the single character or
    var textValue = $("input[x]").val();
    var fulltext = textValue + c;
    //process the full text

});

Use onkeyup , mostrará el valor correcto.

Utilice setTimeout sin demora. Se ejecutará inmediatamente después de que se complete el evento de pulsación de tecla para que tenga el valor correcto de la entrada.

$("input[x]").keypress(function() {
  setTimeout(DoX);
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top