CKeditor的KeyDown事件

时间:2016-05-12 07:50:52

标签: javascript c# jquery asp.net ckeditor

在我的应用程序中,我有一个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页面中编写的代码)

2 个答案:

答案 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.confighttp://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDom

找到更多信息