默认情况下,CKEditor的对话框窗口出现在页面的中间,但是如果页面是高度较高的iframe,则对话框出现在页面的下方。
是否可以configurationCKEditor将对话框放置在页面的不同象限中? 例如顶部中间?
是的,MDaubs提供的链接将引导你做你想做的事情。
过去我不得不这样做,下面的代码片段将为您的问题展示一个解决方案:
CKEDITOR.on('dialogDefinition', function(e) { var dialogName = e.data.name; var dialogDefinition = e.data.definition; dialogDefinition.onShow = function() { this.move(this.getPosition().x,0); // Top center } })
你可以把它放在配置文件或jQuery的ready函数中。
zaf的解决方案有助于定位对话框,但是我发现它会产生一系列的副作用,如对话框的功能如何(在图像对话框中未能显示图像的URL是一个例子) 。
事实证明,被覆盖的原始onShow()
方法返回了一个我们应该保留的有意义的值。 这可能是由于一个插件或什么的,但这是最终为我工作的代码:
CKEDITOR.on('dialogDefinition', function(e) { var dialogName = e.data.name; var dialogDefinition = e.data.definition; var onShow = dialogDefinition.onShow; dialogDefinition.onShow = function() { var result = onShow.call(this); this.move(this.getPosition().x, $(e.editor.container.$).position().top); return result; } });
这可能是你正在寻找的方式:
以编程方式设置CKEditor对话框的位置
我只是和Yehonatan有同样的问题,通过Google发现这个问题非常快。 但是,在使用由zaf提供的答案后,我仍然没有得到一个对话框,当编辑器被加载到一个iframe中时,在正确的位置出现。
而不是使用position()方法,我使用offset()方法在工具栏下面放置一个对话框。 再加上jonespm的响应,我发现这个代码看起来很好,还有现有的对话框。
CKEDITOR.on('dialogDefinition', function(e) { var dialogName = e.data.name; var dialogDefinition = e.data.definition; var onShow = dialogDefinition.onShow; dialogDefinition.onShow = function() { this.move(this.getPosition().x, jQuery(this.getParentEditor().container.$).offset().top); if (typeof onShow !== 'undefined' && typeof onShow.call === 'function') { return onShow.call(this); } } });
希望这个代码可以帮助别人解决和我一样的问题。