Domanda

Voglio che una funzione venga eseguita quando si preme un tasto su una casella di testo, quindi ho questo codice:

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

Funziona benissimo, ma nella mia funzione voglio fare qualcosa in base al valore del testo nella casella di testo

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

Ora il problema qui è che è in ritardo di una chiave, quindi se la mia casella di testo dice 'Lui' e io digito una 'l', allora voglio che il mio textValue sia 'Hel', ma sta restituendo il valore precedente "Lui" perché presumibilmente il personaggio non è stato ancora inserito nella casella di testo.

Esiste un modo per far uscire 'Hel' dalla mia funzione qui?

Grazie :)

È stato utile?

Soluzione

Puoi provare a usare l'evento keyup:

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

Altri suggerimenti

se sei bloccato usando il tasto premuto per qualche altro motivo (quindi non puoi passare al keyup come suggerito) allora puoi ottenere l'ultimo carattere digitato in questo modo:

$("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

});

Usa onkeyup , mostrerà il valore giusto.

Usa setTimeout senza indugio. Verrà eseguito immediatamente dopo il completamento dell'evento keypress, quindi avrai il valore corretto dell'input.

$("input[x]").keypress(function() {
  setTimeout(DoX);
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top