1

我在 ckeditor 实例的文本区域中应用背景颜色时遇到了一些问题。

当用户在不添加任何文本的情况下单击提交时,会显示一条消息,告诉他填写所有必填字段,并且这些必填字段区域都带有设置为的文本字段background-color: #CFC183;

由于 ckeditor 是使用 javascript 代码创建的,因此我使用它来尝试检查文本区域中是否输入了任何文本。如果没有字符,我会应用更改。当我在控制台中应用此代码时:

CKEDITOR.instances.body.document.getBody().setStyle('background-color', '#CFC183');

它完全像我想要的那样应用背景。所以,我在我的 javascript 文件中添加了这个 javascript 代码来尝试管理它,但似乎没有工作。这是我的代码:

var editorInstance = CKEDITOR.replace('body', { toolbar : 'Full' });
editorInstance.on("instanceReady", function (ev) { 
    var editorCKE = CKEDITOR.instances.body; readyMap[editorCKE] = true;
    editorCKE.setReadOnly(true); 
});
var hasText = CKEDITOR.instances.body.document.getBody().getChild(0).getText();
if (!hasText) { 
    CKEDITOR.on('instanceCreated', function(e) { 
        e.editor.document.getBody().setStyle('background-color', '#CFC183');
    });
}

Firebug 显示此错误消息:

类型错误:CKEDITOR.instances.body.document 未定义

我不太擅长 Javascript,所以我的代码有什么问题吗?我已经在这里检查了这个问题,所以我认为我的 javascript 代码有问题,我需要你的帮助。

4

1 回答 1

1

我猜你在这一行有一个错误:

var hasText = CKEDITOR.instances.body.document.getBody().getChild(0).getText();

这是因为您试图在准备好之前(instanceReady事件之前)获取文档元素。

这里会抛出同样的错误:

if (!hasText) { 
    CKEDITOR.on('instanceCreated', function(e) { 
        e.editor.document.getBody().setStyle('background-color', '#CFC183');
    });
}

再次 -instanceCreated还为时过早。您必须将所有代码移至instanceReady侦听器。你会有类似的东西(我不确定我是否理解你想要实现的目标):

var editor = CKEDITOR.replace( 'body', { toolbar: 'Full' } );
editor.on( 'instanceReady', function( evt ) {
    readyMap[ editor.name ] = true;
    editor.setReadOnly( true ); 

    var hasText = editor.document.getBody().getFirst().getText();
    if ( !hasText ) { 
        editor.document.getBody().setStyle( 'background-color', '#CFC183' );
    }
} );

如您所见,您的代码中还有一个问题:

readyMap[editorCKE] = true;

在 JS 中没有弱映射(还没有,但很快就会引入)。只有字符串可以用作对象的键。在你的情况下,toString()方法将被调用editorCKE,它返回[object Object]。这就是我在name那里添加属性的原因。

于 2012-12-27T09:36:27.647 回答