未聚焦时,自定义richcombo会丢失所选项目,或者在ckeditor

时间:2018-03-05 09:14:10

标签: jquery plugins ckeditor

这是我的自定义插件的代码。

CKEDITOR.plugins.add('priority', {
    requires: ['richcombo'],
    init: function(editor) {
        var tags = [];
        // ajax call to load the the items

        editor.ui.addRichCombo('priority', {
            label: "Select Priority",
            title: "Select Priority",
            voiceLabel: "Select Priority",
            className: 'cke_format',

            panel: {
                css: [editor.config.contentsCss, CKEDITOR.skin.getPath("editor")],
                voiceLabel: editor.lang.panelVoiceLabel,
                multiSelect: false,
            },

            init: function() {
                this.startGroup("Priority Group1");
                //this.add('value', 'drop_text', 'drop_label');
                for (var this_tag in tags) {
                    this.add(tags[this_tag][0], tags[this_tag][1], tags[this_tag][2]);
                }
            },

            onClick: function(value) {
                editor.focus();
                this.setValue(value);
                editor.fire('saveSnapshot');
            }
        });
    }
});

意外行为是指我选择一个元素,然后在文本区域内单击以写入已取消的组合所选项目,并显示默认值。 我需要显示所选项目。

我在this question中遇到了同样的问题,但解决方案没有修复它

1 个答案:

答案 0 :(得分:0)

我打开了源文件ckeditor.js,然后我使用http://unminify.com/

取消了它

调试后我发现行调用setValue函数并将空字符串传递给它,这导致在运行时每次选择后丢失所选项目。

我停止了这一行,问题随我解决了,我不知道停止此行是否会影响其他功能; 但是我认为没有人需要插件在没有他的意愿的情况下重置控件 我检查了我的所有需求,但这并没有影响他们。

enter image description here

您需要在停止上线后保持选择,处理onlick事件如下

        // add the menu to the editor
        editor.ui.addRichCombo('myCombo',
            {
                label: "DefaultText",
                title: "Title",
                multiSelect: false,
                panel: { css: [CKEDITOR.skin.getPath("editor")].concat(editor.config.contentsCss) },
                init: function () {
                    //add items of the combo
                    for (var i in strings) {
                        this.add(strings[i][0], strings[i][1], strings[i][2]);
                    }
                },
                onClick: function (value) {
                    this.setValue(value, this._.items[value]);
                    // add your code
                }
            });