7

在 jqueryUI 模式对话框中使用 tinyMCE 时,我无法使用超链接或“插入图像”功能。

基本上,经过大量搜索,我发现了这个:

http://www.tinymce.com/develop/bugtracker_view.php?id=5917

奇怪的是,对我来说,它减少了 tinyMCE 问题,更多的是 jqueryUI 问题,因为当 jqueryUI 的 modal 属性设置为 false 时问题不存在。

通过更丰富的表单,我看到发生的情况是,每当 tinyMCE 失去焦点时,表单中的第一个元素就会获得焦点,即使它不是焦点/点击的元素。

一些 JavaScript 大师是否知道我如何能够保持对话框模式并使 tinyMCE 工作?

4

3 回答 3

7

当覆盖 _allowInteraction 不会时,这为我修复了它:

$(document).on('focusin', function(e) {
    if ($(event.target).closest(".mce-window").length) {
        e.stopImmediatePropagation();
    }
});

我真的不能把它归功于它。我从TinyMCE 论坛上的这个帖子中得到它。 (他们已将 bugtracker 移至github。tinymce/issues/703是相应的 github 问题。)

于 2013-07-17T16:42:07.830 回答
0

这个问题似乎还没有合适的解决方案。这是一种 hack,但它确实对我有用。每次打开对话框时,删除文本区域并重新添加,如下所示,

var myDialog = $('#myDialog');
var myTextarea = myDialog.find('textarea');
var clonedTextArea = myTextarea.clone(); // create a copy before deleting from the DOM
var myTextAreaParent = myTextarea.parent(); // get the parent to add the created copy later

myTextarea.remove(); // remove the textarea

myDialog.find('.mce-container').remove(); // remove existing mce control if exists

myTextAreaParent.append(clonedTextArea); // re-add the copy

myDialog.dialog({
   open: function(e1,e2){
        setTimeout(function () {
             // Add your tinymce creation code here
       },50);
   }
});

myDialog.dialog('open');
于 2014-08-07T06:00:12.560 回答
-1

这似乎为我解决了这个问题,或者至少可以解决它(把它放在你的 $(document).ready() 中的某个地方):

$.widget('ui.dialog', $.ui.dialog, {
    _allowInteraction: function(event) {
        return ($('.mce-panel:visible').length > 0);
    }
});
于 2013-07-01T15:05:55.143 回答