我的问题是我有一个插件,当页面中只有1个CKEditor时它可以正常工作。您可以根据需要多次打开和关闭自定义插件对话框,并进行所有更改。
但是,只要在页面上的任何其他CKEditor上打开插件,前一个CKEditor实例的值仍然存在,并且会发生很多怪癖。
我尝试使用dialog.destroy()函数来“修复”这个问题 - 这意味着你现在可以在所有不同的CKEditor实例上使用它了。但是它打破了当前的实例,这意味着如果你试图打开任何已经再次使用的实例,它就不起作用(因为对话框已被破坏)。我尝试使用reset()和replace()无济于事。
也许它与字段本身有关...这是对话框/ my_plugin.js文件中的一个示例:
contents: [
{
id: 'tab-basic',
label: 'Basic Settings',
elements: [
{
type: 'html',
id: 'icon_with_options',
html: '<div id="selected-icon"></div>',
},
{
type: 'html',
id: 'osu_icon_color',
html: '<div class="osu-colors"><label>Click on a color <input id="osu-icon-color" type="text" value="osu" readonly/></label>' +
'<p class="osu color-active"></p>' +
'<p class="sand"></p>' +
'<p class="stratosphere"></p>' +
'<p class="moondust"></p>' +
'<p class="dark"></p>' +
'<p class="pine-stand"></p>' +
'<p class="luminance"></p>' +
'<p class="reindeer-moss"></p>' +
'</div>',
onLoad: function () {
(function ($) {
var colors = $('.osu-colors p');
colors.click(function (e) {
colors.removeClass('color-active');
var className = e.currentTarget.className;
document.getElementById('osu-icon-color').value = className;
icon_preview();
$(this).addClass('color-active');
});
})(jQuery);
},
},
我想知道问题是大多数HTML都是装饰。 我使用常规类型对插件进行了示例:text和type:select,这些工作正常。但不知何故,类型:'html'不会以同样的方式清除并导致问题。不幸的是,所有在线示例都是简单的文本元素或其他预构建元素。
感谢任何帮助。这是Drupal 7模块中的插件,但无论如何都应该适用。
答案 0 :(得分:0)
我确信有更好的方法可以做到这一点,但我最终做的是:
由于CKEditor为编辑器的每个实例提供了唯一的名称,因此我使用:CKEDITOR.currentInstance.name作为包装插件中所有html的ID。
修改我的javascript以基于CKEDITOR.currentInstance.name和我需要的任何特定ID或类来定位所有内容。
现在,由于每个实例都由该ID区分,因此页面中的所有CKEditor实例都可以正常工作。