2017-04-11 154 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')我忘了加,所以這是我的錯:)