我可以看到有幾個理由說明你的例子不起作用。
- 我很肯定在按鍵事件期間,鍵被添加到textarea中。它可能是keydown。但絕對不是關鍵事件。
- ckeditor事件附帶的keyCode不能直接傳遞給textarea。它有關於alt,ctrl和shift鍵是否被按下的信息。你需要首先將它們去掉。 (請參閱下面我創建rawKey變量的示例)
您還可能想要從事件處理程序中刪除textarea.bind()調用。將它放在那裏意味着每次在ckeditor中按下一個鍵時,您將綁定另一個事件處理程序副本到textarea。可能不是你想要的。
不管怎麼說,這是我的樣本
function onEditorKeyEvent(event) {
var rawKey = event.data.keyCode & ~(CKEDITOR.SHIFT | CKEDITOR.CTRL | CKEDITOR.ALT);
var eventData =
{
altKey: !!(event.data.keyCode & CKEDITOR.ALT),
ctrlKey: !!(event.data.keyCode & CKEDITOR.CTRL),
shiftKey: !!(event.data.keyCode & CKEDITOR.SHIFT),
keyCode: rawKey,
which: rawKey
};
var myTextbox = $('#myTextBox');
triggerKeyEvents(eventData, myTextbox);
}
function triggerKeyEvents(eventData, elementToTriggerOn)
{
// these key events can generate an extra keyUp event for some reason if they are done in the same thread.
//so we just do them on a different thread :-)
setTimeout(this.callback(function() {
var keydownEvent = jQuery.Event('keydown', eventData);
elementToTriggerOn.trigger(keydownEvent);
if (!keydownEvent.isDefaultPrevented()) {
elementToTriggerOn.trigger(jQuery.Event('keypress', eventData));
}
elementToTriggerOn.trigger(jQuery.Event('keyup', eventData));
}), 1);
}