在javascript中keypress和keyup之间是否有任何事件?

时间:2009-10-02 11:32:48

标签: javascript events keypress contenteditable

我有一种情况需要拦截被压入contentEditable div的每个键。但是当按键事件发生时,如果我这样做,

document.getElementById("divEditor").innerHTML

我无法获得全文(没有按下最后一个字符)

此外,连续按键不会触发keyup事件。如果有一个具有全部价值的关键事件,我该怎么办?

3 个答案:

答案 0 :(得分:1)

keyup是唯一可以看到后按键状态的事件。

一种方法是捕获keydown并设置超时以在按键后进行一些处理:

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

但是,如果还可以在没有按键的情况下进行编辑(通常是通过拖放和剪切和粘贴等菜单项),对关键事件的检查数量也无济于事。相反,您必须简单地轮询状态以查看它是否已更改。您可以使用onkeyup处理程序或onkeydown timeout来备份它,以便更快地更新特定的案例。

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

(为简单起见,它使用输入元素,但同样适用于contentEditable。)

答案 1 :(得分:0)

似乎最好的方法是拥有一个INPUT字段(position:absolute; left:-1000px)并将所有3个事件(keydown keypress keyup)添加到其中。

现在您可以使用此输入字段的值,CTRL + Z有效,您可以粘贴值。

所有你需要做的就是将setFocus设置为输入字段。

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;

答案 2 :(得分:0)

onblur()怎么样?您需要两个功能,按键功能,然后在焦点离开文本框时调用onblur()。这可以让您访问文本的其余部分。