Ich sehe, dass, wenn ich versuche, den Wert aus einem Textarea Feld zu lesen, wenn seine onpaste
Funktion aufgerufen wird, bekomme ich den alten Wert des Feldes (der vor dem Einfügen), nicht der neue Wert (der nach dem Einfügen Betrieb).Wie erhalte ich den neuen Wert eines Textfeld-Eingabefeldes beim Einfügen?
Hier ist eine Demonstration dieses Verhalten: http://jsfiddle.net/qsDnr/
Eine Kopie des Codes folgt:
<!DOCTYPE html>
<html>
<head>
<title>On Paste</title>
<script type="text/javascript">
var textareaElement;
var previewElement;
function update()
{
previewElement.innerHTML = textareaElement.value;
}
window.onload = function() {
textareaElement = document.getElementById('textarea');
previewElement = document.getElementById('preview');
textareaElement.onpaste = update
}
</script>
</head>
<body>
<textarea id="textarea">
</textarea>
<div id="preview">
</div>
</body>
</html>
Sie das Verhalten mit den folgenden Schritten bestätigen können.
- Kopieren Sie die Zeichenfolge
foo
in Ihre Zwischenablage. - Klicken Sie mit der rechten Maustaste auf das Textfeld, und wählen Sie "Einfügen". Nichts erscheint im div-Element.
- Klicken Sie mit der rechten Maustaste auf das Textfeld, und wählen Sie erneut "Einfügen".
foo
erscheint im div-Element.
Da ich das div-Element will immer zeigen, was mit dem Einfügen in dem Textelement aktualisiert wurde, ist die gewünschte Ausgabe foo
und foo foo
in Schritt 2 und 3 jeweils.
Ein Weg, ich es geschafft haben, ist die gewünschte Ausgabe zu erhalten, indem die update()
Funktionsaufruf mit window.setTimeout()
verzögert, so dass anstelle von
textareaElement.onpaste = update
Ich habe
bekamtextareaElement.onpaste = function() {
window.setTimeout(update, 100);
};
diesmal (Demo: http://jsfiddle.net/cwpLS/). Das macht was ich will. Dies ist jedoch eher ein Workaround als ein einfacher Weg, um das zu tun, was ich will. Ich würde gerne wissen, ob es einen alternativen oder besseren Weg gibt, dies zu tun.
[Dieses Ereignis] (https://developer.mozilla.org/de/DOM/element.onpaste) wird gesendet, wenn der Benutzer * versucht * Text einzufügen - kann bedeuten, dass onpaste ausgelöst wird, bevor der Text eingefügt wird. – Joseph
'event.clipboardData.getData ('text/plain')' erlaubt es, Inhalte zu bekommen, würde eingefügt werden, aber ich bin nicht sicher, dass es in jedem Browser verfügbar ist und der aktuelle Text und die Auswahl sollten ebenfalls berücksichtigt werden. Ich fürchte, Sie müssen Timeout verwenden oder 'onkeyup' /' onmouseup' verfolgen. – kirilloid
@Joseph Ich stimme zu.Ich versuche herauszufinden, ob das Problem, das ich lösen möchte, am besten mit 'setTimeOut' gelöst wird, wie ich es in diesem Beitrag erklärt habe oder ob es bessere Möglichkeiten gibt, dieses Problem zu lösen. –