【问题标题】:ckeditor within jquery-ui dialog - internet explorer 11 problem with tool dropdownsjquery-ui 对话框中的 ckeditor - Internet Explorer 11 工具下拉菜单问题
【发布时间】:2021-03-04 09:57:09
【问题描述】:

我正在尝试在 jquery-ui 对话框中显示 ckeditor, 而且效果很好 - 乍一看。

但在 IE11 中,当我单击任何打开下拉/选择(例如颜色选择)的工具按钮时,鼠标上移时所需的叠加层会短暂闪烁,但下一刻它就消失了。

它可以在 Chrome 和 Edge 中运行,但目前 IE11 是最重要的目标浏览器。

jQuery 是 1.11,jQuery-UI 是 1.11.4,ckEditor 是 4.15.1。


我发现,只有当对话框是模态时才会出现问题。 这是一个示例:

function openDialogEditor() {
    var somedialog = document.createElement("div");
    somedialog.id = "somedialog";
    somedialog.innerHTML = '<div id="somediv"><textarea id="someid" name="somename" class="ckeditor" style="height:350px;">Stackoverflow is great!</textarea></div>';
    document.body.appendChild(somedialog);
    
    jQuery(somedialog).dialog({width: '800px', modal: true}).parent().promise().done(function(dlg) {
        CKEDITOR.replace("someid");
    });
}

如果您将modal: true 更改为modal: false,问题就解决了 - 但对话框应该是模态的。

我的解决方法:请参阅下面的答案。

【问题讨论】:

  • 提供与您的问题相关的代码示例,以便其他人能够重现您的问题。
  • 当然,@tomfrio。因此,我构建了一个简单的示例,并猜猜是什么 - 问题没有出现。一定还有一些我还没有发现的其他情况。我会回来或交流解决方案。到目前为止谢谢!
  • 这个问题怎么样?如果您已解决,您可以将您的解决方案作为答案并将其标记为已接受的答案。它可以在未来帮助其他社区成员解决类似的问题。或者没有解决的可以提供可复现的代码sn-p。
  • 感谢@yu-zhou 的建议。我还没有任何解决方案,下周之前我将无法对此进行任何工作。
  • 没关系。您可以随时回来。

标签: javascript jquery internet-explorer ckeditor jquery-ui-dialog


【解决方案1】:

可能的解决方案,在 IE11 中工作:

  1. 将对话框设置为modal: false
  2. 使用 jquery 的 css 类添加自定义叠加层。
  3. 删除对话框关闭时的自定义叠加层。

(我的代码示例还需要删除编辑器以重用 openDialogEditor() 函数 - 当然这也可以不同的处理方式。)


1 + 2)

function openDialogEditor() {
    var somedialog = document.createElement("div");
    somedialog.id = "somedialog";
    somedialog.innerHTML = '<div id="somediv"><textarea id="someid" name="somename" class="ckeditor" style="height:350px;">Stackoverflow is great!</textarea></div>';
    document.body.appendChild(somedialog);
    
    jQuery(somedialog).dialog({width: '800px', modal: false}).parent().promise().done(function(dlg) {
        CKEDITOR.replace("someid");
        dlg.css('z-index', '101').parent().append('<div id="ownOverlay" class="ui-widget-overlay ui-front" style="z-index:100"></div>');
    });
}
  1. 扩展对话框关闭功能:
jQuery.widget("ui.dialog", jQuery.ui.dialog, {
    close: function(ev) {
        // remove custom overlay:
        jQuery("#ownOverlay").remove();
        // remove dialog and editor:
        var dlgDiv = jQuery(ev.target).closest('div[role="dialog"]')[0];
        dlgDiv.parentNode.removeChild(dlgDiv);
        
        return this._super(ev);
    }
});

如果您有更好的解决方案、建议、改进:请发表评论。 :)

【讨论】:

  • 感谢您发布此问题的解决方案。您可以将您的答案标记为已接受的答案。它可以在未来帮助其他社区成员解决类似的问题。感谢您的理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 2014-02-18
相关资源
最近更新 更多