我有一种情况,我需要拦截每个按键被压入contentEditable div。但是,当按键事件发生,如果我这样做,javascript和keypress之间是否有任何事件?
document.getElementById("divEditor").innerHTML
我不能全文(没有最后一个字符按下)
此外,keyUp事件不火的连续按键。我能做些什么来获得具有整体价值的关键事件?
我有一种情况,我需要拦截每个按键被压入contentEditable div。但是,当按键事件发生,如果我这样做,javascript和keypress之间是否有任何事件?
document.getElementById("divEditor").innerHTML
我不能全文(没有最后一个字符按下)
此外,keyUp事件不火的连续按键。我能做些什么来获得具有整体价值的关键事件?
keyup
是唯一可以看到后按键状态的事件。
一种方法是陷阱和设置超时的按键后做一些处理:通常
input.onkeydown= function() {
setTimeout(function() {
// do something
}, 1);
};
然而,如果还可能做的编辑没有按键(和它是,通过拖拽拖放和菜单项目,如剪切和粘贴),不会检查重要事件。相反,您只需轮询状态以查看它是否发生了变化。您可以使用onkeyup处理程序或onkeydown超时进行备份,以便更快地进行特定的案例更新。
var oldstate= input.value;
function checkState() {
if (input.value!=oldstate) {
// do something
oldstate= input.value;
}
}
setInterval(checkState, 1000);
input.onkeyup= checkState;
(这里使用了简单的输入元素,但同样适用于CONTENTEDITABLE。)
现在在HTML5中有'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;
onblur()
?您需要两个功能,即按键功能,然后在焦点离开文本框时调用onblur()。这应该让您可以访问其他文本。
也有keydown ......不知道什么时候会发生,虽然 – SeanJA 2009-10-02 11:38:36
你可以做一段时间(元素在焦点){//做些事情}我想......? – SeanJA 2009-10-02 11:40:26