2013-06-11 56 views
3

我正在研究CKEditor中的一個插件,該插件的目標是隱藏或顯示元素,具體取決於我的哪個複選框被選中。我定義的那些元素:在CKEditor的對話框中隱藏文本輸入

contents : 
      [ 
       { 
        id : 'tab1', 
        label : 'Configuration Basique', 
        elements : 
        [ 
         { 
          type : 'checkbox', 
          id : 'check', 
          label : 'Vers une page web', 
          'default' : 'unchecked', 
          onClick : function(){ 

          } 
         }, 
         { 
          type : 'text', 
          id : 'title', 
          label : 'Explanation', 
         }  
        ] 
       }, 
       { 
        id : 'tab2', 
        label : 'Advanced Settings', 
        elements : 
        [ 
         { 
          type : 'text', 
          id : 'id', 
          label : 'Id' 
         } 
        ] 
       } 
      ], 

所以現在我想要做的就是躲無可禁用帶標籤的文本輸入並打印出來,只有當被選中的複選框。所以我看到了,我應該使用類似的東西:

onLoad : function(){ 
       this.getContentElement('tab1','title').disable(); 
     }, 

但事情是我不想禁用它我想隱藏,然後打印,如果用戶選中複選框(這就是爲什麼我在我的複選框中放置了一個onClick函數)。我嘗試使用hide()函數,但它不工作,也是setAttribute('style','display:none;') Tia :)

回答

1

您的複選框定義是正確的,但沒有像onClick屬性在對話框uiElement定義。你所要做的就是附加一些聽衆並切換你的領域。在這裏你去:

CKEDITOR.on('dialogDefinition', function(ev) { 
    var dialogName = ev.data.name; 
    var dialogDefinition = ev.data.definition; 

    if (isThisYourDialog?) { 

     ... 

     // Toggle your field when checkbox is clicked or dialog loaded. 
     // You can also use getInputElement to retrieve element and hide(), show() etc. 
     function toggleField(field, check) { 
      field[ check.getValue() ? 'enable' : 'disable' ](); 
     } 

     var clickListener; 

     dialogDefinition.onShow = function() { 
      var check = this.getContentElement('tab1', 'check'), 

       // The element of your checkbox. 
       input = check.getInputElement(), 

       // Any field you want to toggle. 
       field = this.getContentElement('tab1', 'customField'); 

      clickListener = input.on('click', function() { 
       toggleField(field, check); 
      }); 

      // Toggle field immediately on show. 
      toggleField(field, check); 
     } 

     dialogDefinition.onHide = function() { 
      // Remove click listener on hide to prevent multiple 
      // toggleField calls in the future. 
      clickListener.removeListener(); 
     } 

     ... 
    } 
}); 

更多文檔:uiElement APIdialog definition API

+0

謝謝男人:d它的工作:)的的onClick THIG我發現在這裏http://docs.cksource.com/ckeditor_api/symbols/ CKEDITOR.dialog.definition.checkbox.html我想它是depricated – ponayz

3

如果你真的想隱藏(而不是禁用),你可以做到這一點的元素使用

this.getContentElement('tab1','title').getElement().hide(); 

額外getElement()調用返回的ContentElement對象的litteral DOM對象,所以你可以調用隱藏()/ show()隨意就可以了。

1

onClick屬性可用,但對uiElement起作用,雖然沒有記錄。最大的問題是「this」的定義在事件內部不同於配置中的其他位置。你首先必須得到對話框獲得其他領域:

{ 
    type: 'checkbox', 
    id: 'check', 
    label: 'check', 
    onClick: function() { 
     var dialog = this.getDialog() 
     if(this.getValue()){ 
      dialog.getContentElement('tab1','title').disable(); 
     } else { 
      dialog.getContentElement('tab1','title').enable() 
     } 
    } 
}