在我的应用程序中,我有一个CKEditor的实例。当用户在编辑器中输入文本时,后者应该是大写的。为此我写了一个jQuery keydown事件处理程序,如下所示:
$(document).ready(function () {
CKEDITOR.instances.CKEditor1.on('contentDom', function () {
CKEDITOR.instances.CKEditor1.document.on('keydown', function (event) {
if (this.selectionStart == 0 && event.keyCode >= 65 && event.keyCode <= 90 && !(event.shiftKey) && !(event.ctrlKey) && !(event.metaKey) && !(event.altKey)) {
var $t = $(this);
event.preventDefault();
var char = String.fromCharCode(event.keyCode);
$t.val(char + $t.val().slice(this.selectionEnd));
this.setSelectionRange(1, 1);
}
});
});
});
它给出了运行时错误,即
0x800a138f - JavaScript运行时错误:无法获取属性&#39; on&#39;未定义或空引用
如何为ckeditor创建keydown事件。(上面我在.aspx页面中编写的代码)
答案 0 :(得分:1)
您可以使用以下代码实现此目的。
CKEDITOR.replace( 'editor1', {
on: {
instanceReady: function() {
alert( this.name ); // 'editor1'
},
key: function() {
setTimeout(function(){
console.log('key pressed');
},1);
}
}
});
如果没有setTimeout函数,编辑器将无法捕获最后按下的键。
CKEditor版本4.x
答案 1 :(得分:0)
我相信您以错误的方式注册了contentDom事件。 要实例化CKEDITOR并注册你要做的contentDom事件
CKEDITOR.replace( 'editor1', {
on: {
instanceReady: function() {
alert( this.name ); // 'editor1'
var editor = this;
editor.on( 'contentDom', function() {
var editable = editor.editable();
editable.attachListener( editable, 'click', function() {
console.log( 'The editable was clicked.' );
});
});
}
}
} );
您的代码在完成实例化之前尝试访问CKEDITOR实例。 可以在http://docs.ckeditor.com/#!/api/CKEDITOR.config和http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDom
找到更多信息