Javascript 在编辑器文本区域应用背景色

Javascript 在编辑器文本区域应用背景色,javascript,css,ckeditor,Javascript,Css,Ckeditor,在ckeditor实例的文本区域应用背景色时遇到一些问题 当用户单击submit而不添加任何文本时,会显示一条消息,告诉他填写所有必填字段,并且这些必填字段区域中的所有文本字段都设置为背景色:#CFC183 由于ckeditor是用javascript代码创建的,所以我用它来检查文本区域中是否输入了任何文本。如果没有字符,我将应用更改。 当我在控制台中应用此代码时: CKEDITOR.instances.body.document.getBody().setStyle('background-c

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

当用户单击submit而不添加任何文本时,会显示一条消息,告诉他填写所有必填字段,并且这些必填字段区域中的所有文本字段都设置为
背景色:#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显示此错误消息:

TypeError:CKEDITOR.instances.body.document未定义

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

我想您在这行中有一个错误:

var hasText = CKEDITOR.instances.body.document.getBody().getChild(0).getText();
这是因为您试图在文档元素准备就绪之前(在
instancerady
事件之前)获取它

此处将抛出相同的错误:

if (!hasText) { 
    CKEDITOR.on('instanceCreated', function(e) { 
        e.editor.document.getBody().setStyle('background-color', '#CFC183');
    });
}
同样-
instanceCreated
仍然为时过早。您必须将所有代码移动到
instancerady
listener。你会有这样的想法(我不确定我是否理解你想要实现的目标):

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

readyMap[editorCKE] = true;

在JS中没有弱映射(目前还没有,但很快就会引入)。只有字符串可以用作对象的键。在您的情况下,将在
editorCKE
上调用
toString()
方法,该方法返回
[object]
。这就是为什么我在那里添加了
name
属性。

我猜您在这行中有一个错误:

var hasText = CKEDITOR.instances.body.document.getBody().getChild(0).getText();
这是因为您试图在文档元素准备就绪之前(在
instancerady
事件之前)获取它

此处将抛出相同的错误:

if (!hasText) { 
    CKEDITOR.on('instanceCreated', function(e) { 
        e.editor.document.getBody().setStyle('background-color', '#CFC183');
    });
}
同样-
instanceCreated
仍然为时过早。您必须将所有代码移动到
instancerady
listener。你会有这样的想法(我不确定我是否理解你想要实现的目标):

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

readyMap[editorCKE] = true;

在JS中没有弱映射(目前还没有,但很快就会引入)。只有字符串可以用作对象的键。在您的情况下,将在
editorCKE
上调用
toString()
方法,该方法返回
[object]
。这就是为什么我在那里添加了
name
属性。

谢谢你的回答。这个问题你说得对!我只是对IE9有一个问题,因为在“editor.document.getBody().getFirst().getText()”为空的情况下,我有一个javascript错误。你知道我该怎么解决吗?你可以直接在body上
getText()
。但这是一种非常不可靠的检查编辑器是否为空的方法。你至少应该调整这个值。谢谢你的回答。这个问题你说得对!我只是对IE9有一个问题,因为在“editor.document.getBody().getFirst().getText()”为空的情况下,我有一个javascript错误。你知道我该怎么解决吗?你可以直接在body上
getText()
。但这是一种非常不可靠的检查编辑器是否为空的方法。您至少应该修剪该值。