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.
InformationsquelleAutor der Frage | 2010-11-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dies wird den job tun, oder wenn nicht, ist sehr nahe und müssen nur geringfügige Anpassungen. Die Sache, die Sie haben zu erinnern ist, dass Sie nicht zuverlässig sagen überhaupt nichts über irgendwelche Zeichen, die eingegeben werden in eine
keydown
oderkeyup
Ereignis: dass alles getan werden muss, in einemkeypress
handler. Die definitive Ressource für wichtige Ereignisse ist http://unixpapa.com/js/key.htmlSie müssen auch prüfen, Pasten, die in diesem code nicht verarbeiten. Sie müssen separate
paste
event-handler (obwohl dieses Ereignis nicht unterstützt in Firefox < 3.0, Opera, und sehr alte WebKit-Browser). Sie benötigen einen timer in deine Ereignisprozedur paste da es unmöglich ist, in JavaScript Zugriff auf die Inhalte, die über eingefügt werden.InformationsquelleAutor der Antwort Tim Down
Mögliche Lösung, die ich finden kann, ist die überprüfung der Länge des Schlüssels in event.
ZB:-
So, wenn Sie drücken Sie eine beliebige Zeichen/Symbole, die
event.key
enthalten, dass der Charakter und seine Länge werden 1. Wenn Sie drücken Charakter V dann dieevent.key
wird Wert V aber wenn Sie die enter-Taste drücken, dann wird es enthalten Wert Geben Sie, wenn Sie drücken Sie die Umschalttaste und dann auf Shift und so weiter. Deshalb, wenn ein Schlüssel nicht erzeugen einen Charakter, dann ist seine Länge größer sein wird als 1.Aktualisiert
Einige spezielle Tasten in der Tastatur erzeugen symbol und seine Länge kann größer als 1, so dass ich veränderte den code so, dass es kann Sie warnen, auch wenn es nicht ein symbol. ZB:- ? seine Länge ist 2. Einige mobile Tastaturen sind Kurzbefehle für solche Symbole.
Einem nicht-Zeichen - /symbol-Tasten in der Tastatur, wird immer eine Kombination aus Buchstaben, Ziffern oder von beiden, wie ZB:- F2, Shift.
Danke @Vicky Chijwani für die Aufmerksamkeit auf dieses Szenario.
InformationsquelleAutor der Antwort Visruth
OK, ich denke ich habe es. Die Lösung ist ein bisschen hackish, aber eigentlich funktioniert sehr gut.
On keydown, ein setTimeout für 1 Millisekunde, der eine Funktion aufruft, um zu überprüfen/ändern Sie die Länge des Eingabe-Feld.
http://jsfiddle.net/rygar/e2wQM/
Es scheint wirklich gut zu funktionieren, vor allem in ein paar Orte, wo Ihre version nicht (z.B. backspace, STRG+V, oder wählen Sie eine ganze Reihe von text und drücken auf löschen)
Edit: Selbst setTimeout mit 0ms Verzögerung scheint zu funktionieren!
InformationsquelleAutor der Antwort Jeff
Sollten Sie die Eigenschaft keyEventArgs.Schlüssel in der keydown-Funktion, das liefert den numerischen Wert, der abhängig vom system.
hier ist ein link, der die verschiedenen key-codes für die verschiedenen Browser und OS:
http://www.quirksmode.org/js/keys.html
InformationsquelleAutor der Antwort mariana soffer
Hier ein viel einfachere Lösung, die gut für mich gearbeitet:
Dies erfordert nicht antasten eines DOM-Elements (die hinzufügen würde, Latenz und Hässlichkeit).
InformationsquelleAutor der Antwort MikeX
Dies ist nicht die Methode, nach der Sie suchen, aber Sie können einfach überprüfen Sie den Wert der
this.value.length
in dein keydown-Funktion. Der Rückgabewert ist die Länge des Textes in das Eingabefeld, BEVOR der neue Charakter Hinzugefügt wird. Also, wenn Sie überprüfen Sie die Länge wieder in das keyup-Funktion, es wird größer sein, wenn der Benutzer drückt einen Charakter, aber die gleiche, wenn der Benutzer die shift-Taste.InformationsquelleAutor der Antwort Jeff
Ich nehme an, Sie sind der Einrichtung ein Zähler auf die Länge eines Eingabefeldes, in welchem Fall Sie nicht brauchen, um so fancy, Sie können einfach halten Sie die Zuordnung, die Länge des Feldes in eine variable, und wenn der Benutzer bekommt auf Ihre maximale Länge nur Ihnen zu ermöglichen, drücken Sie die entf-bzw. die Rücktaste so:
Können Sie die aktuelle variable zum anzeigen der Zähler als auch, oder haben maxlength - Strom zu tun, ein countdown, wie viele charachters sind Links
InformationsquelleAutor der Antwort Liam Bailey
Ihr Ziel, halten Sie das Textfeld größer als der text, der eingegeben wurde, in es.
Ich würde dies erreichen, indem Sie der Planung auf genügend Platz für zwei zusätzliche Zeichen (nicht) in das Textfeld ein. Dann:
Den Vorteil, der oben ist, dass Sie nicht brauchen, steigen Sie hinab in die Unterwelt des Schlüsselcodes.
InformationsquelleAutor der Antwort Larry K