Frage

Ich habe eine Situation, wo ich alle Schlüssel, das ist gedrückt in einem contentEditable div abfangen muß. Aber wenn das Tastendruck-Ereignis passiert, wenn ich das tue,

document.getElementById("divEditor").innerHTML

Ich kann nicht den vollständigen Text erhalten (muss nicht das letzte Zeichen gedrückt)

Auch dann, wenn keyup Ereignis nicht für die Dauer Drücken von Tasten feuern. Was kann ich tun, um eine Schlüsselereignis haben, der den gesamten Wert hat?

War es hilfreich?

Lösung

keyup ist das einzige Ereignis, das den Post-keypress Zustand zu sehen bekommt.

Ein Ansatz ist, zu stoppen keydown und legen Sie ein Timeout einige Verarbeitung nach dem Tastendruck zu tun:

input.onkeydown= function() {
    setTimeout(function() {
        // do something
    }, 1);
};

Wenn es jedoch auch möglich ist, Änderungen ohne Tastendruck zu tun (und es in der Regel, per Drag-and-Drop und Menüpunkte wie Cut-and-Paste), kein Betrag für die wichtigsten Ereignisse der Überprüfung zu helfen. Stattdessen müssen abfragen Sie einfach den Zustand zu sehen, ob sie sich geändert hat. Sie können dies mit einem onkeyup Handler oder onkeydown Timeout zurück bis zu schneller diesen speziellen Fall Update zu machen.

var oldstate= input.value;
function checkState() {
    if (input.value!=oldstate) {
        // do something
        oldstate= input.value;
    }
}
setInterval(checkState, 1000);
input.onkeyup= checkState;

(Dieser verwendet eine Eingabeelement der Einfachheit halber, sondern gleichermaßen auf contentEditable.)

Andere Tipps

was ist onblur()? Sie müßten zwei Funktionen, Ihren Tastendruck Funktion, und dann ein onblur () -Aufruf, wenn der Fokus auf das Textfeld verlassen hat. Dies sollten Sie für den Rest des Textes zugreifen zu können.

Es scheint der beste Weg, ein Eingabefeld (position:absolute; left:-1000px) und fügen Sie alle drei Ereignisse (keydown keypress keyup), um es zu haben wäre.

Jetzt können Sie den Wert dieses Eingabefeld, CTRL + Z Werke und Sie können Werte einfügen.

Alles, was Sie tun müssen, als zu setFocus des Eingabefeld ist.

var user_action = function ()
{
   document.getElementById("divEditor").innerHTML =    document.getElementById("myhiddenInput").value;
};

document.getElementById("myhiddenInput").onchange = user_action;
document.getElementById("myhiddenInput").onkeydown  = user_action;
document.getElementById("myhiddenInput").onkeyup    = user_action;
document.getElementById("myhiddenInput").onkeypress = user_action;

document.getElementById("divEditor").onclick = document.getElementById("myhiddenInput").focus;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top