无法在joomla的jQueryUI对话框中键入TinyMCE编辑器

时间:2013-05-06 06:36:07

标签: joomla tinymce joomla2.5

我使用joomla内置函数在jQuery对话框的页面上创建一个tinyMCE编辑器。但是,会出现对话框,tinyMCE编辑器就像它处于只读模式。

这是php内置函数,它回应了编辑器:

<div id="PhoneCallCard" title="Phone Call Card" style="display:none;">      
    <?php
      $editor = JFactory::getEditor();                                                                                          
      echo $editor->display('commentz', $this->content, '600', '100', '60', '20', false);      
    ?>
</div>

这是我打开该对话框的jQuery实现:

jQuery("#PhoneCallCard").dialog({
            height:500,
            width:800,
            modal: true,
            close: function(ev, ui){                                                
              jQuery('#tablepanelfightclubrequests .trSelected').removeClass('trSelected');                         
              },
            open:function({ //Everything I tried to activate the tinyMCE
           //tinyMCE.activeEditor.getBody().setAttribute('contenteditable', false);
           //tinyMCE.execCommand('mceRemoveControl',false,'commentz');
           //tinyMCE.execCommand('mceAddControl',false,'commentz');
           //tinyMCE.execCommand('mceFocus', false, 'commentz');
            }});

我在此处Why can't I type in TinyMCE in my jQueryUI modal dialog?TinyMCE and JQuery dialog: TinyMCE read only when modal:true in the Dialog也发现了类似问题,但两者都无法解决我的问题

5 个答案:

答案 0 :(得分:2)

我遇到同样的问题并在页面加载时通过加载对话框修复。 例如:

jQuery(function() {
jQuery( "#dialog_desc" ).dialog({
    modal: true,
    width: 600,
    height:500,
    autoOpen: false,
});
}

当你想打开对话框时:

    jQuery( "#dialog_desc" ).dialog( "open" );

希望这有帮助!

答案 1 :(得分:1)

加载对话框后应加载编辑器。你能做的是:

  1. 使用$ editor-&gt; display method
  2. 按现在的方式加载编辑器
  3. 在打开jquery ui对话框之前,请分离编辑器
  4. 再次显示UI对话框和加载编辑器,稍有时间延迟,以便编辑器在对话后加载。
  5. 这是一个示例代码

    在触发对话框打开后使用此代码

    if ((tinyMCE != undefined) && (tinyMCE.activeEditor != undefined)){
      tinyMCE.activeEditor.remove();
      setTimeout(function(){
        tinyMCE.execCommand('mceAddControl', false, 'commentz');
      },500);
    }
    

答案 2 :(得分:1)

当活动TinyMCE时需要settimeout,因为,当对话框初始化时需要时间等待。

例如:

$("#PositionShowDialog").dialog({
modal: true,
open: setTimeout('Change_TextareaToTinyMCE_OnPopup("#elementId");', 1000),
width: width,
......

如果加载了tinymce但你无法输入(如禁用)。您需要设置更多时间来设置时间。

对不起,我的英文皮肤不好

答案 3 :(得分:1)

我也得到了同样的错误...... 我的第一个代码

$( "#f_edit_gallery" ).dialog({
autoOpen: false,
resizable: true,
show: "clip",
height:450,
width:850,
modal: true
});

删除选项

show: "clip",

是这样的

$( "#f_edit_gallery" ).dialog({
    autoOpen: false,
    resizable: true,
    height:450,
    width:850,
    modal: true
    });

tinyMCE在那之后运行良好

答案 4 :(得分:0)

Nagarjun回答的一个小修正使得剧本适合我:

if ((tinyMCE != undefined) && (tinyMCE.activeEditor != undefined)){  
  tinyMCE.activeEditor.remove();  
  $("#dialogId").dialog('open');  
  setTimeout(function(){  
    tinyMCE.execCommand('mceAddControl', false, 'commentz');  
  },500);  
}  

ie:我需要在打开对话框之前删除tinyMCE 并启动超时