2010-07-19 168 views
2

我想使用ckeditor來編輯單行,所以我不希望用戶能夠使用輸入密鑰。有誰知道如何停止使用輸入密鑰?ckeditor關閉輸入密鑰

我試過$("#text").keypress(function(event){ alert(event.keyCode); });但它沒有註冊。謝謝你的幫助。

回答

2

這是一種破解,但我得到它的工作方式是改變keystroke配置上發生的事情。我將它設置爲「模糊」。

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' ] 
    ] 

此外,在數據發佈之前,我刪除了任何段落標籤。

0

這不是一個優雅的解決方案(正則表達式可能太簡單了,但我很幸運,我不允許源模式)。如果您在關鍵事件中做了返回錯誤,它只是拒絕了密鑰,會很好。

$('#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

3

這就是我所做的。我創建了一個名爲「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.js文件,config.extraPlugins = 'doNothing';,再放入

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'分配給任何你想禁用的鍵,儘管我自己並沒有嘗試過其他的鍵。

0

你遇到的一個問題是,ckeditor使用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 
} 
4

CKEditor的4具有配置對象上提供一個blockedKeystrokes屬性。

例,阻止進入和Shift + Enter:

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

'blockedKeystrokes'不是爲我工作的CKEditor ** ** 4.7.3,除非我做錯了什麼 – Drakkin 2017-12-08 16:06:10