Ist es möglich, das eingegebene Zeichen bei Tastendruck zu ändern, ohne es manuell zu tun?Kann ich das eingegebene Zeichen bei Tastendruck bedingt ändern?
Zum Beispiel, wenn ich Großbuchstaben erzwingen wollen, basierend auf einer Bedingung, wäre es schön, folgendes zu tun:
function onKeypressHandler(e)
{
if (condition)
{
e.which -= 32;
}
}
Aber natürlich, das nicht funktioniert.
HINWEIS: Dies ist nicht ein auf der ganzen Linie großgeschrieben, aber nur bestimmte Zeichen.
Vielleicht will ich if (e.which >= 97 && e.which <= 102)
oder if (Wind.Direction == 'South')
oder was auch immer sagen - die Bedingung selbst ist nicht wichtig, aber die großgeschrieben muss nur auf den aktuellen Charakter gilt nicht die gesamte Eingabe.
Ich kann es tun, indem ich das geänderte Zeichen manuell angehängt habe, aber das ist eine hässliche und chaotische Art, es zu tun, und wahrscheinlich langsamer als es sein könnte.
function onKeypressHandler(e)
{
if (condition)
{
$j(this).val($j(this).val() + String.fromCharCode(e.which - 32));
return false;
}
}
Ein spezifischen Fehler mit dieser Methode - wenn alle eingegebenen Texte auswählen und einen Schlüssel eingeben, wenn sie in diesen fallen dann ist es vorhandene Inhalte nicht zu entfernen, sondern einfach anhängt zum Inhalt wollte der Benutzer entfernt. (Müsste untersuchen, jeden ausgewählten Text zu erkennen, um das zu lösen, der dieses noch hässlicher macht.)
Kann jemand eine bessere Lösung zur Verfügung stellen?
Wie würden Sie Einfügen behandeln, Undo/Redo, Drag & Drop oder andere Instanzen von mehreren Zeichen sein zur gleichen Zeit eingegeben oder ist das nicht wichtig? –
Andy, das ist nicht sehr wichtig hier, aber wäre immer noch nützlich zu handhaben - ich denke, es würde erfordern, die Schnur manuell zu führen, innerhalb der Onchange-Event? –
Oder die Ereignisse * oninput * und * onpropertychange *. Ich habe das vor kurzem in meinem Blog beschrieben - http://whatcheheadid.com/2010/09/effectively-detection-user-input-in-javascript und ich habe ein fast vollständiges jQuery-Plugin dafür in Arbeit. –