Hoe krijg ik jQuery .val() NA een toetsaanslag?

Ik heb:

$(someTextInputField).keypress(function() {
  alert($(this).val());
});

Nu geeft de waarschuwing altijd de waarde VOORDAT de keypress(bijv. het veld is leeg, ik typ ‘a’ en de waarschuwing geeft me ”. Dan typ ik ‘b’ en de waarschuwing geeft ik ‘een’…). Maar ik wil de waarde NA de keypress– hoe kan ik dat doen?

Achtergrond: ik wil graag een knop inschakelen zodra het tekstveld ten minste één teken bevat. Dus ik voer deze test uit bij elke gebeurtenis keypress, maar met de geretourneerde val()loopt het resultaat altijd een stap achter. Het gebruik van de gebeurtenis change()is geen optie voor mij omdat de knop dan uitgeschakeld is totdat je het tekstvak verlaat. Als er een betere manier is om dat te doen, hoor ik het graag!


Antwoord 1, autoriteit 100%

Verander keypressin keyup:

$(someTextInputField).on("keyup", function() {
  alert($(this).val());
});

keypresswordt geactiveerd wanneer de toets wordt ingedrukt, keyupwordt geactiveerd wanneer de toets wordt losgelaten.


Antwoord 2, autoriteit 40%

Verbaasd dat niemand de js “input”-gebeurtenis noemde:

$(someTextInputField).on('input', function() {
  alert($(this).val());
});

Aanbevolen.

https://developer.mozilla.org/en-US/docs/Web/Events /invoer


Antwoord 3, autoriteit 6%

gebruik keyupin plaats van een toetsaanslag.


Antwoord 4, autoriteit 3%

Als alternatief kunt u de keydown-gebeurtenis gebruiken met een time-out van 0.

Op die manier worden de wijzigingen onmiddellijk toegepast, in plaats van dat ze worden toegepast wanneer de gebruiker de toets niet meer ingedrukt houdt.

$(someTextInputField).on("keydown", function() {
  setTimeout(function($elem){
    alert($elem.val());
  }, 0, $(this));
});

Antwoord 5, autoriteit 3%

Probeer zoiets als dit:

$('#someField').keypress(function() {
  setTimeout(function() {
    if ($('#someField').val().length > 0)
      $('#theButton').attr('disabled', false);
  }, 1);
});

Dat introduceert gewoon een time-out, zodat nadat de “keypress”-gebeurtenislus is voltooid, uw code vrijwel onmiddellijk daarna wordt uitgevoerd. Zo’n korte timer-interval (zelfs als deze door de browser naar boven wordt afgerond) zal niet opvallen.

bewerken— of u zou“keyup” kunnen gebruiken zoals iedereen zegt, hoewel de semantiek anders is.

Other episodes