Wie erkennt man, ob die gedrückte Taste ein Zeichen innerhalb eines & lt; -Eingangs & gt; Textfeld?

Ich habe einen normalen text-box:

<input type="text"> 

Ich die jQuery-Griff-Schlüssel-Ereignisse:

$("input:text").keydown(function() {
    //keydown code
}).keypress(function() {
    //keypress code
}).keyup(function() {
    //keyup code
});

Der Benutzer den Fokus auf ein Textfeld und drückt auf verschiedene Tasten auf seiner Tastatur (die üblichen sind: Buchstaben, zahlen, SHIFT, BACKSPACE, SPACE, ...). Ich muss erkennen, wenn der Benutzer eine Taste drückt, erhöhen die Länge der text-box Wert. Zum Beispiel die Taste "A" erhöht, die "SHIFT" - Taste nicht.

Ich erinnere mich an einen Vortrag von PPK, wo er erwähnt den Unterschied zwischen diesen beiden. Es hat etwas zu tun mit dem Ereignis keydown vs. keypress - und möglicherweise auch mit der event-Eigenschaften - key, char keyCode.

Update!

Ich muss wissen, diese Informationen in der keydown-und keypress-Handler. Ich kann nicht warten, für das keyup-Ereignis auftreten.

Warum brauche ich das:

Ich habe eine text-box, die Größe dynamisch ändert auf der Grundlage der Benutzereingabe. Sie können einen Blick auf diese demo: http://vidasp.net/tinydemos/variable-size-text-box.html

In der demo, habe ich ein keydown-und keyup-handler. Das keyup-handler stellt die text-Kasten-Größe auf der Grundlage der input-Wert. Aber das keydown-handler-sets der Größe 1 Zeichen größer, dann wird der input-Wert. Der Grund, warum ich das Tue, ist, dass wenn ich nicht, dann wird der Charakter würde überlauf außerhalb der text-box und das nur, wenn der Benutzer die Taste loslassen, wird der text-box erweitern würde. Das sieht komisch aus. Das ist, warum ich haben zu antizipieren, die neue Charakter - ich vergrößern der text-box auf jedem keydown -, ergo -, bevor die Figur erscheint in der text-box. Wie Sie sehen können, in der demo, diese Methode sieht toll aus.

Jedoch, das problem sind die RÜCKTASTE und die PFEILTASTEN - Sie wird auch erweitern Sie die text-box auf Tastendruck, und nur auf keyup-die text-box Größe korrigiert werden.

Ein work-around:

Einen work-around wäre, zu erkennen, die BACKSPACE -, SHIFT-und PFEILTASTEN manuell und handeln basiert auf:

//keydown handler
function(e) {
    var len = $(this).val().length;
    if (e.keyCode === 37 || e.keyCode === 39 ||
        e.keyCode === 16) { //ARROW LEFT or ARROW RIGHT or SHIFT key
        return;
    } else if (e.keyCode === 8) { //BACKSPACE key
        $(this).attr("size", len <= 1 ? 1 : len - 1);
    } else {
        $(this).attr("size", len === 0 ? 1 : len + 1);
    }
}

Das funktioniert (und gut aussieht) für BACKSPACE, SHIFT, PFEIL-LINKS und PFEIL-RECHTS. Allerdings würde ich gerne eine stabilere Lösung.

Kommentar zu dem Problem
Was die Massen gerne wissen würde ist "Warum brauchen Sie, zu wissen, über den Wert der Länge ändern, bevor die keyUp-handler aufgerufen wird"?? Kommentarautor: Larry K
@Larry K ich aktualisiert meine Frage... Kommentarautor: Šime Vidas
do u wollen zu erkennen, STRG+V (einfügen)? Kommentarautor: Lukman
@Lukman Wenn es möglich ist, cross-browser-Erkennung einfügen, das wäre cool. Aber meine primäre Sorge sind wichtige Ereignisse. Kommentarautor: Šime Vidas

InformationsquelleAutor der Frage | 2010-11-14

Schreibe einen Kommentar