2017-04-11 127 views
0

所以我正在制作自己的插件到ckeditor,因为我需要特殊情况。无论如何,我无法编辑textarea元素。这是我整个的代码我自己的会话(插件):CKEditor的对话框textarea不可编辑

CKEDITOR.dialog.add('myDialog', function(editor) { 
    return { 
     title: 'My Plugin', 
     minWidth: 750, 
     minHeight: 500, 
     onShow: function(evt) { 
      var selection = editor.getSelection(); 
      var widget = editor.widgets.selected[0]; 
      var element = !!widget && !!widget.parts ? widget.parts['my'] : false; 
      var command = this.getName(); 

      if(command == 'myDialog') { 
       var code = selection.getSelectedElement(); 

       if(code && !!element) { 
        this.setupContent(code); 
        widget.data.myinput = element.getHtml(); 
       } 
      } 
     }, 
     contents: [{ 
      id: 'info', 
      label: 'Info', 
      accessKey: 'I', 
      elements: [{ 
       id: 'myinput', 
       type: 'textarea', 
       required: true, 
       label: 'Content', 
       rows: 42, 
       setup: function(widget) { 
        this.setValue(widget.data.myinput); 
       }, 
       commit: function(widget) { 
        widget.setData('myinput', this.getValue()); 
       } 
      }] 
     }], 
    }; 
}); 

问题仅仅是内contents.myinput。它的类型是textarea,但是当我打开它不可编辑的对话框时。当我将文字类型更改为文本并删除行时,文本输入显示出来,效果很好等等。只有textarea是问题。这是怎么看起来像打开对话框后:

enter image description here

我CKEditor的版本是4.5。我之前已经制作了3个插件,但从未使用过textarea,所以其他插件除此之外都可以使用。我会追加jsFiddle,如果有任何网站提供“ckeditor插件测试程序”,所以我只是发布我的代码。

回答

0

问题是我在引导程序的对话框中初始化ckeditor。因此,对于我的问题的解决方案是初始化后应用的代码下面几行:

$.fn.modal.Constructor.prototype.enforceFocus = function() { 
    var $modalElement = this.$element; 

    $(document).on('focusin.modal', function(e) { 
     var $parent = $(e.target.parentNode); 
     if($modalElement[0] !== e.target 
       && !$modalElement.has(e.target).length 
       && !$parent.hasClass('cke_dialog_ui_input_select') 
       && !$parent.hasClass('cke_dialog_ui_input_text') 
       && !$parent.hasClass('cke_dialog_ui_input_textarea')) { 
      $modalElement.focus(); 
     } 
    }) 
}; 

我有问题,在此之前的代码,但我缺少!$parent.hasClass('cke_dialog_ui_input_textarea')我忘了加,所以这是我的错:)