我有一種情況,我需要攔截每個按鍵被壓入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