Ich habe folgende Funktion:
$(document).ready(function() {
$("#dSuggest").keypress(function() {
var dInput = $('input:text[name=dSuggest]').val();
console.log(dInput);
$(".dDimension:contains('" + dInput + "')").css("display","block");
});
});
Aus irgendeinem Grund erhalte ich beim ersten Tastendruck eine leere Zeichenfolge im Konsolenprotokoll.
quelle
input
Ereignistyp hindeutet .Da mir klar wird, dass dies ein ziemlich alter Beitrag ist, werde ich trotzdem eine Antwort geben, da ich mit dem gleichen Problem zu kämpfen hatte.
Sie sollten
"input"
stattdessen das Ereignis verwenden und sich bei der.on
Methode registrieren . Dies ist schnell - ohne Verzögerungkeyup
und löst das fehlende neueste Tastendruckproblem, das Sie beschreiben.Demo hier
quelle
Verwenden Sie
.keyup
anstelle von Tastendruck.Verwenden Sie auch
$(this).val()
oder nur,this.value
um auf den aktuellen Eingabewert zuzugreifen.DEMO hier
Informationen zu
.keypress
jQuery-Dokumenten,quelle
keyup
ist zu langsam, und eine Taste kann gedrückt und gehalten werden, ohne losgelassen zu werden, und es müssen Dinge geschehen. Besserkeydown
mit einer kleinen Zeitüberschreitung verwenden, damit sich der Wert tatsächlich ändert.Sie müssen den Ausführungsthread unterbrechen, damit die Eingabe aktualisiert werden kann.
quelle
keyup
Die Verzögerung ist für einige Zwecke zu langsam und filtert auch keine Modifikatortasten automatisch. Das funktioniert bei mir eigentlich besser.Dies liegt daran, dass ein
Keypress
Ereignis ausgelöst wird, bevor das neue Zeichen hinzugefügt wird. Verwenden Sie stattdessen das Ereignis 'keyup', das in Ihrer Situation perfekt funktioniert.Ich möchte dem hinzufügen, wenn Sie viele Textfelder haben und dasselbe für ihr Keyup-Ereignis tun müssen, können Sie ihnen einfach eine gemeinsame CSS-Klasse (z. B. CommonCss) geben und ein Keyup-Ereignis wie dieses anwenden.
Dadurch wird Ihr Code erheblich reduziert, da Sie nicht für jedes Textfeld ein Schlüsselereignis nach ID anwenden müssen.
quelle
Ich suchte nach einem ES6-Beispiel (damit es an meinem Linter vorbeikommt). Also für andere Leute, die dasselbe suchen:
Ich würde auch keyup verwenden, weil Sie den aktuellen Wert erhalten, der ausgefüllt wird.
quelle
Verwenden Sie einfach eine Zeitüberschreitung, um Ihren Anruf zu tätigen. Das Timeout wird aufgerufen, wenn der Ereignisstapel beendet ist (dh nachdem das Standardereignis aufgerufen wurde).
quelle
Ich denke, was Sie brauchen, ist der folgende Prototyp
quelle
jQuery erhält nach Tastendruck einen Eingabewert
https://www.tutsmake.com/jquery-keypress-event-detect-enter-key-pressed/
quelle