Trotz vieler Artikel über SO, wie man Tastenbetätigungen (keydown/keypress) in JS simuliert, scheint keine Lösung mit den Browsern zu funktionieren, die ich benutze (Firefox ESR 17.0. 7, Chrome 28.0.1500.72, IE 10). Die Lösungen, die ich getestet habe, wurden aus here, here und here entnommen.JavaScript: Schlüsselereignisse in Textbox/Eingabe simulieren
Was ich versuche zu tun ist, jeden Tastendruck in einem Textarea/Eingabe zu simulieren. Während ich Zeichen anfügen/löschen kann, die direkt "Wert" ändern, sehe ich keine Option, sondern Eingabesimulation für die Tasten wie "Auf", "Ab", "Home" und einige andere.
Nach der documentation sollte es einfach sein. Zum Beispiel:
var e = document.createEvent("KeyboardEvent");
if (e.initKeyboardEvent) { // Chrome, IE
e.initKeyboardEvent("keydown", true, true, document.defaultView, "Enter", 0, "", false, "");
} else { // FF
e.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, 13, 0);
}
document.getElementById("text").dispatchEvent(e);
tatsächlich löst das "Enter" -Keydown-Ereignis, und mein Handler kann es fangen. Es wirkt sich jedoch nicht auf das Textfeld aus - eine neue Zeile wird nicht angezeigt. Das Gleiche gilt für andere Tastencodes: Zeichen werden nicht angezeigt, Pfeile ändern nicht den Standort des Kästchens, usw.
Ich habe den Code um Orwellophile erweitert und auf http://jsfiddle.net/npF3d/4/ gestellt, damit jeder mit dem Code spielen kann. In meinen Browsern erzeugt keine Schaltfläche einen Effekt auf den Textbereich in irgendeiner Bedingung.
Ich würde jede Hilfe zu diesem Thema schätzen.
OK erreichen, ich hatte das gleiche Gefühl, dass dies absichtlich aus Sicherheitsgründen getan werden könnte. Ab Q/A: Text zu bearbeiten ist kein Problem, das Problem ist, "Up", "Down", "Home" und dergleichen zu simulieren ... – lexasss
diese könnten möglicherweise implementiert werden, wenn Sie das Textfeld neu erstellen/Eingabe als ein Blockknoten, der Inline-Knoten für jedes Zeichen mit passendem Wrapping, Größe und Styling enthält, und dann Berechnung aller verschiedenen Rects, um zu finden, wo du enden willst. Ich kann mir nicht vorstellen, dass es einfach zu implementieren ist ... vielleicht wäre eine sauberere Methode, eine Monospace-Schriftart zu verwenden, herauszufinden, wo der vorherige neue Zeilen-Charakter war und dann einfach die Zeichen zählen. –
Danke. Allerdings simuliere ich die Eingabe auf dritten Seiten, wie google.com. Meine virtuelle Tastatur ist als Chrome-Erweiterung implementiert und muss Benutzern ermöglichen, Text in Formularen auf jeder Seite mit nur dieser Tastatur einzugeben und zu ändern. Es wäre eine große Enttäuschung, wenn einige Funktionen fallengelassen werden müssten. – lexasss