ckeditor关闭输入密钥

时间:2010-07-19 01:54:55

标签: jquery ckeditor

我正在尝试使用ckeditor编辑单行,因此我不希望用户能够使用回车键。有谁知道如何停止使用回车键?

我试过$("#text").keypress(function(event){ alert(event.keyCode); });但它没有注册。谢谢你的帮助。

6 个答案:

答案 0 :(得分:4)

这就是我的所作所为。我创建了一个名为'doNothing'的虚拟插件。只需在'plugins'下创建一个'doNothing'目录,然后将以下代码粘贴到那里的plugin.js文件中。

(function()
{
    var doNothingCmd =
    {
        exec : function( editor )
        {
            return;
        }
    };
    var pluginName = 'doNothing';
    CKEDITOR.plugins.add( pluginName,
    {
        init : function( editor )
        {
            editor.addCommand( pluginName, doNothingCmd );
        }
    });
})();

使用config.extraPlugins = 'doNothing';将插件添加到config.js文件中,然后输入

config.keystrokes =
[
    [ 13 /*Enter*/, 'doNothing'],
    [ CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ],
    [ CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' ],

    [ CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' ],

    [ CKEDITOR.CTRL + 90 /*Z*/, 'undo' ],
    [ CKEDITOR.CTRL + 89 /*Y*/, 'redo' ],
    [ CKEDITOR.CTRL + CKEDITOR.SHIFT + 90 /*Z*/, 'redo' ],

    [ CKEDITOR.CTRL + 76 /*L*/, 'link' ],

    [ CKEDITOR.CTRL + 66 /*B*/, 'bold' ],
    [ CKEDITOR.CTRL + 73 /*I*/, 'italic' ],
    [ CKEDITOR.CTRL + 85 /*U*/, 'underline' ],

    [ CKEDITOR.ALT + 109 /*-*/, 'toolbarCollapse' ]
];

瞧!现在输入键完全没有任何意义。您还应该能够将“doNothing”分配给您要禁用的任何其他键,尽管我自己没有尝试过其他键。

答案 1 :(得分:4)

CKEditor 4在配置对象上有blockedKeystrokes属性。

阻止输入和移位+输入的示例:

CKEDITOR.inline('someEditorElementId', {
    blockedKeystrokes: [13, CKEDITOR.SHIFT + 13]
});

答案 2 :(得分:2)

这是一种黑客攻击,但我让它工作的方式是改变击键配置上发生的事情。我把它设置为'模糊'。

keystrokes:
   [
   [ 13, 'blur'],
   [ CKEDITOR.SHIFT + 13, 'blur' ],
   [ CKEDITOR.CTRL + 90, 'undo' ],
   [ CKEDITOR.CTRL + 89, 'redo' ],
   [ CKEDITOR.CTRL + CKEDITOR.SHIFT + 90, 'redo' ],
   [ CKEDITOR.CTRL + 66, 'bold' ],
   [ CKEDITOR.CTRL + 73, 'italic' ],
   [ CKEDITOR.CTRL + 85 , 'underline' ],
   [ CKEDITOR.ALT + 109, 'toolbarCollapse' ]
   ]

此外,在发布数据之前,我删除了任何段落标记。

答案 3 :(得分:0)

这也不是一个优雅的解决方案(正则表达式也可能过于简单,但我很幸运,因为我不允许源模式)。如果你从一个关键事件中做出了返回false,那么如果它只是拒绝了密钥,那就太好了。

    $('#text').ckeditorGet().on('afterCommandExec', function (e) {
    var text = $('#text').ckeditorGet().getData();
    $('#text').ckeditorGet().setData(text.replace(/<\/*p>/i, ''));
    $('#text').ckeditorGet().focus();
});

需要将config.shiftEnterMode与CKEDITOR.ENTER_P结合使用,否则你也必须处理br。焦点不完美,因为它重置光标位置。使用afterCommandExec似乎是在按下回车键之后触发的事件,在没有键盘的情况下(对于排序键,请参阅the onchange plugin

答案 4 :(得分:0)

你遇到的一个问题是ckeditor使用iframe作为编辑部分,而事件(如关键事件)不会像iframe那样从iframe中冒出来。

我这样做的方法是连接到ckeditor的键事件并取消它以进入。像这样:

CKEDITOR.replace($('#myText')[0], //can't be jQuery obj
{ on: {'key': ckeditorKeyPress} }
);

function ckeditorKeyPress(event){
    switch(event.data.keyCode){
      case 13: //enter key
        event.cancel();
        event.stop();
      break;
    }
    //trigger an imitation key event here and it lets you catch the enter key
    //outside the ckeditor
}

答案 5 :(得分:0)

我无法让插件或被阻止的击键工作,所以我通过捕获键事件来解决这个问题。

注意:受此comment

启发
editor.on('key', function(e) {
    if (e.data.keyCode === 13 /*enter*/ ||
        e.data.keyCode === 2228237 /*shift + enter*/) {
            e.cancel();
    }
}