Redactor 9.2.6 fontcolor插件没有反映HTML视图中的“背景颜色”变化?

时间:2015-04-23 10:29:36

标签: javascript jquery html redactor redactor.js

我正在使用Redactor插件版本9.2.6,我添加了fontcolor插件,用于添加添加字体颜色和背景颜色的功能。

问题:

  1. 当我尝试在编辑器中添加字体颜色时,相同的更改会反映在HTML视图中。插件会自动添加<span style="font-color: colorcode;" >Selected Content</span>
  2. 当我尝试使用背景颜色做同样的事情时,编辑器表现良好但更改未反映在HTML视图中,这导致我出现问题。
  3. FontColor插件:

    if (!RedactorPlugins) var RedactorPlugins = {};
    
    RedactorPlugins.fontcolor = {
        init: function()
        {
            var colors = [
                '#ffffff', '#000000', '#eeece1', '#1f497d', '#4f81bd', '#c0504d', '#9bbb59', '#8064a2', '#4bacc6', '#f79646', '#ffff00',
                '#f2f2f2', '#7f7f7f', '#ddd9c3', '#c6d9f0', '#dbe5f1', '#f2dcdb', '#ebf1dd', '#e5e0ec', '#dbeef3', '#fdeada', '#fff2ca',
                '#d8d8d8', '#595959', '#c4bd97', '#8db3e2', '#b8cce4', '#e5b9b7', '#d7e3bc', '#ccc1d9', '#b7dde8', '#fbd5b5', '#ffe694',
                '#bfbfbf', '#3f3f3f', '#938953', '#548dd4', '#95b3d7', '#d99694', '#c3d69b', '#b2a2c7', '#b7dde8', '#fac08f', '#f2c314',
                '#a5a5a5', '#262626', '#494429', '#17365d', '#366092', '#953734', '#76923c', '#5f497a', '#92cddc', '#e36c09', '#c09100',
                '#7f7f7f', '#0c0c0c', '#1d1b10', '#0f243e', '#244061', '#632423', '#4f6128', '#3f3151', '#31859b',  '#974806', '#7f6000'
            ];
    
            var buttons = ['fontcolor', 'backcolor'];
    
            for (var i = 0; i < 2; i++)
            {
                var name = buttons[i];
    
                var $dropdown = $('<div class="redactor_dropdown redactor_dropdown_box_' + name + '" style="display: none; width: 243px;">');
    
                this.pickerBuild($dropdown, name, colors);
                $(this.$toolbar).append($dropdown);
    
                var btn = this.buttonAdd(name, this.opts.curLang[name], $.proxy(function(btnName, $button, btnObject, e)
                {
                    this.dropdownShow(e, btnName);
    
                }, this));
    
                btn.data('dropdown', $dropdown);
            }
        },
        pickerBuild: function($dropdown, name, colors)
        {
            var rule = 'color';
            if (name === 'backcolor') rule = 'background-color';
    
            var _self = this;
            var onSwatch = function(e)
            {
                e.preventDefault();
    
                var $this = $(this);
                _self.pickerSet($this.data('rule'), $this.attr('rel'));
    
            }
    
            var len = colors.length;
            for (var z = 0; z < len; z++)
            {
                var color = colors[z];
    
                var $swatch = $('<a rel="' + color + '" data-rule="' + rule +'" href="#" style="float: left; font-size: 0; border: 2px solid #fff; padding: 0; margin: 0; width: 20px; height: 20px;"></a>');
                $swatch.css('background-color', color);
                $dropdown.append($swatch);
                $swatch.on('click', onSwatch);
            }
    
            var $elNone = $('<a href="#" style="display: block; clear: both; padding: 4px 0; font-size: 11px; line-height: 1;"></a>')
            .html(this.opts.curLang.none)
            .on('click', function(e)
            {
                e.preventDefault();
                _self.pickerSet(rule, false);
            });
    
            $dropdown.append($elNone);
        },
        pickerSet: function(rule, type)
        {
            this.bufferSet();
    
            this.$editor.focus();
            this.inlineRemoveStyle(rule);
            if (type !== false) this.inlineSetStyle(rule, type);
            if (this.opts.air) this.$air.fadeOut(100);          
            this.sync();
        }
    };
    

    为什么会这样?有什么想法??

1 个答案:

答案 0 :(得分:0)

刚刚找到解决方案。

在fontcolor.js文件中,只需在this.setSpansVerified();方法中的this.sync();之前添加pickerSet即可。 修改后的最终方法如下所示:

pickerSet: function(rule, type)
{
    this.bufferSet();
    this.$editor.focus();
    this.inlineRemoveStyle(rule);
    if (type !== false) this.inlineSetStyle(rule, type);
    if (this.opts.air) this.$air.fadeOut(100);
    this.setSpansVerified();  //adding this line solves the problem
    this.sync();
}

这应该可以解决问题。 :)