2009-10-02 2 views
0

У меня возникла ситуация, когда мне нужно перехватить каждую клавишу, которая нажата в contentEditable div. Но когда происходит событие нажатия клавиши, если я,Есть ли какое-либо событие между keypress и keyup в javascript?

document.getElementById("divEditor").innerHTML 

я не могу получить полный текст (не последний символ нажатой)

Кроме того, KeyUp событие не срабатывает для непрерывных нажатиями. Что я могу сделать, чтобы иметь ключевое событие, имеющее всю ценность?

+0

Существует также keydown ... не уверен, когда это срабатывает, хотя – SeanJA

+0

Вы могли бы сделать некоторое время (элемент в фокусе) {// сделать что-то} Я думаю ...? – SeanJA

ответ

1

keyup - это единственное событие, которое позволяет увидеть состояние после нажатия клавиши.

Один подход заключается в ловушку keydown и установить тайм-аут, чтобы сделать некоторую обработку после нажатия клавиши:

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

Однако, если это возможно сделать изменения без нажатия клавиши (и это обычно бывает, с помощью drag- и-drop и пункты меню, такие как вырезание и вставка), никакая проверка проверки ключевых событий не поможет. Вместо этого вы должны просто опросить состояние, чтобы узнать, изменилось ли оно. Вы можете поддержать это с помощью обработчика onkeyup или тайм-аута onkeydown, чтобы ускорить обновление этого конкретного случая.

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

(При этом используется входной элемент для простоты, но в равной степени применимо к contentEditable.)

+0

В настоящее время в HTML5 присутствует событие 'input', которое довольно хорошо поддерживается на' 'и немного менее хорошо поддерживается на'