10

我尝试以这种方式捕获CKEditor的保存按钮上发生的单击事件

  var element = CKEDITOR.document.getById('CKEditor1');
  element.on('click', function (ev) {
      //ev.removeListener();
      alert('hello');
      return false;
  });

但它不起作用。当我单击 CKEditor 的保存按钮时,会发生回发。如果可能的话,请帮助我使用正确的代码示例来捕获 CKEditor 的保存按钮上发生的单击事件。谢谢

我得到了解决方案

  CKEDITOR.plugins.registered['save'] = {
      init: function (editor) {
         var command = editor.addCommand('save',
         {
              modes: { wysiwyg: 1, source: 1 },
              exec: function (editor) { // Add here custom function for the save button
              alert('You clicked the save button in CKEditor toolbar!');
              }
         });
         editor.ui.addButton('Save', { label: 'Save', command: 'save' });
      }
  }

我正在寻找的上述代码。上面的代码帮助我捕获工具栏中保存按钮的单击事件。谢谢

4

5 回答 5

8

这是(在我看来)更好/更清洁的方法来完成您已经想出的事情。这只会替换保存按钮运行的 javascript,这意味着它不会将保存按钮移出其原始工具栏组:

html:

<textarea id="CKEditor1"></textarea>

javascript:

<script>
    // Need to wait for the ckeditor instance to finish initialization
    // because CKEDITOR.instances.editor.commands is an empty object
    // if you try to use it immediately after CKEDITOR.replace('editor');
    CKEDITOR.on('instanceReady', function (ev) {

        // Create a new command with the desired exec function
        var overridecmd = new CKEDITOR.command(editor, {
            exec: function(editor){
                // Replace this with your desired save button code
                alert(editor.document.getBody().getHtml());
            }
        });

        // Replace the old save's exec function with the new one
        ev.editor.commands.save.exec = overridecmd.exec;
    });

    CKEDITOR.replace('CKEditor1');

</script>
于 2013-11-08T22:11:29.247 回答
0

转到 ckeditorcontrol 属性并找到 prerender 事件,以便您可以使用 prerender 事件将文本保存在数据库中。

protected void CKEditorControl2_PreRender(object sender, EventArgs e)
{
  if (!string.IsNullOrWhiteSpace(CKEditorControl2.Text))
  {
    // write here what you want to save in your database.
  }
}
于 2013-12-06T09:34:52.933 回答
0

使用mousedown而不是click提交按钮,并添加ev.preventDefault以停止提交。

var element = CKEDITOR.document.getById('CKEditor1');
element.on('mousedown', function (ev) {
   ev.preventDefault();
   alert('hello');
   return false;
});
于 2013-08-20T08:57:48.983 回答
0

withpreventDefault()如果调用该方法,则不会触发事件的默认动作。
请尝试此代码:

$(document).on('click', '#CKEditor1', function(ev){
   ev.preventDefault();
   alert('hello');
   return false;
});

可能会帮助你。

于 2013-08-20T08:53:10.903 回答
0

event.preventDefault()文档

Description: If this method is called, the default action of the event will not be triggered.

添加这个...

 ev.preventDefault();

在你的代码中

  $('#CKEditor1').on('click', function (ev) {
      ev.preventDefault();
      alert('hello');
      return false;
  });
于 2013-08-20T08:53:42.560 回答