2013-06-11 38 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() 
     } 
    } 
}