ckeditor выключить клавишу ввода - PullRequest
3 голосов
/ 19 июля 2010

Я пытаюсь использовать ckeditor для редактирования отдельных строк, поэтому я не хочу, чтобы пользователи могли использовать клавишу ввода. Кто-нибудь знает, как остановить использование клавиши ввода?

Я пытался $("#text").keypress(function(event){ alert(event.keyCode); }); Но он не регистрировался. Спасибо за любую помощь.

Ответы [ 5 ]

4 голосов
/ 13 мая 2013

CKEditor 4 имеет свойство blockedKeystrokes, доступное для объекта конфигурации.

Пример, в котором блоки ввода и сдвига + ввода:

CKEDITOR.inline('someEditorElementId', {
    blockedKeystrokes: [13, CKEDITOR.SHIFT + 13]
});
4 голосов
/ 03 ноября 2011

Вот что я сделал.Я создал фиктивный плагин под названием «ничего».Просто создайте каталог 'doNothing' в разделе 'plugins', затем вставьте следующий код в файл 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» для любой другой клавиши, которую вы хотите отключить, хотя я сам не пробовал другие.

2 голосов
/ 22 апреля 2011

Это что-то вроде взлома, но я заставил его работать, чтобы изменить то, что происходит в конфигурации нажатия клавиш.Я установил для него «размытие».

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 голосов
/ 01 декабря 2011

Одна из проблем, с которыми вы столкнулись, заключается в том, что 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
}
0 голосов
/ 21 июля 2011

Это тоже не элегантное решение (регулярное выражение также может быть слишком простым, но мне повезло, что я не разрешаю исходный режим). Было бы неплохо, если бы он просто отклонил ключ, если вы сделали возврат 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, по-видимому, является событием, инициируемым после нажатия клавиши ввода, в отсутствие keyup (для сортировки клавиш см. плагин onchange )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...