【问题标题】:CKeditor save eventCKeditor 保存事件
【发布时间】:2011-01-06 20:39:02
【问题描述】:

我正在按照本主题中编写的步骤进行操作:CKEditor, AJAX Save 如果有人按下 AjaxSave 按钮,我会尝试触发自定义的“saved.ckeditor”事件。但我没有成功。

ckeditor/plugins/ajaxsave/plugin.js:

(function(){
    var saveCmd =
         {  
            modes : { wysiwyg:1, source:1 },  
            exec : function( editor )  
            {
                editor.fire('saved.ckeditor');
                $(editor).trigger('saved.ckeditor', editor.getData());
                alert(editor.getData());
            }
          }
    var pluginName = 'ajaxsave';
    CKEDITOR.plugins.add( pluginName,
    {
        init : function( editor )
        {
            var command = editor.addCommand( pluginName, saveCmd );
            command.modes = { wysiwyg : !!( editor.element.$.form ) };
            editor.ui.addButton( 'AjaxSave',
            {
                label : editor.lang.save,
                command : pluginName,
                className : 'cke_button_save'
            });
        }
   });  
})();

如果我在函数中获取或设置编辑器数据,get 和 set 事件将自动被触发。但我什至无法手动触发“getData.ckeditor”事件。

有什么建议吗?

另一件事:如果编辑器的内容自上次保存后没有更改(它不脏),我如何禁用该按钮?

【问题讨论】:

  • 在 jquery 适配器中他们这样做(至少主要是): var a=window.jQuery; a.extend(a.fn,{ckeditorGet:function(){...}}); var e=a(这个); e.trigger('setData.ckeditor',[j]);

标签: events save ckeditor


【解决方案1】:

我有一个解决方法。

外面我可以听set事件:

window.onload = function()
{
    var ckparams={width: 500, height: 400, resize_enabled:false, extraPlugins: 'ajaxsave',toolbar:[['AjaxSave','Source','-','Bold','Italic','Underline','-','Undo','Redo','-','Find','Replace','-','SelectAll','-','SpellChecker','Scayt','-','About']]};
    //CKEDITOR.replace('editor', ckparams);
    var editor = $('textarea.editor').ckeditor(ckparams);
    $(editor).bind('setData.ckeditor', function() {
        //do what I want
    });
};

...当按下按钮时,将数据设置为其当前值:

var saveCmd =
  {
    modes : { wysiwyg:1, source:1 },
    exec : function( editor )
    {
        editor.setData(editor.getData());
    }
}

这样至少会触发一个事件... 但是当我从外部手动设置内容时,我要小心......

【讨论】:

    【解决方案2】:

    试试这个,你需要完成 exec() 函数

    (function() {
    
        var saveCmd = {
            modes:{wysiwyg:1,source:1 },
            readOnly: 1,
    
            exec: function( editor ) {
                var data = editor.getData();
                console.info(data);
            }
        };
    
        var pluginName = 'ajaxSave';
    
        // Register a plugin named "save".
        CKEDITOR.plugins.add( pluginName, {
            lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en-au,en-ca,en-gb,en,eo,es,et,eu,fa,fi,fo,fr-ca,fr,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt-br,pt,ro,ru,sk,sl,sq,sr-latn,sr,sv,th,tr,ug,uk,vi,zh-cn,zh', // %REMOVE_LINE_CORE%
            icons: 'save', // %REMOVE_LINE_CORE%
            init: function( editor ) {
    
                // Save plugin is for replace mode only.
                if ( editor.elementMode != CKEDITOR.ELEMENT_MODE_REPLACE ) return;
    
                editor.ui.addButton && editor.ui.addButton( 'Save', {
                    label: editor.lang.save.toolbar,
                    command: pluginName,
                    toolbar: 'document,10'
                });
            }
        });
    })();
    

    别忘了在 config.js 中启用插件

    config.extraPlugins = 'ajaxSave';
    

    【讨论】:

      【解决方案3】:

      你可以编辑常规保存按钮的功能来做你想做的事:

      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>
      

      【讨论】:

      • 对我不起作用 - 按保存按钮仍会像以前一样导致表单发布。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2012-11-16
      • 1970-01-01
      • 2022-12-14
      • 2011-05-20
      • 2013-09-07
      • 1970-01-01
      相关资源
      最近更新 更多