2016-01-29 29 views
0

Ckeditor是神奇的,但它被编程为与我混乱。如何链接CK编辑器textarea中的计数字符?

我已经链接到CDN并实例化了一个给定ID cke_quotation的textarea。在原始的textarea中,我有一个jQuery的函数,在keyup和focusout上,有一个字符计数。现在我想将此函数链接到ckeditor引用,该引用的ID为cke_quotation。但它不会工作。我究竟做错了什么?

回答

2

CKEditor不能在纯文本区域上工作 - 它使用contenteditable元素来代替。如果您想倾听您需要倾听的关键事件,所谓的可编辑。

var editor = CKEDITOR.instances.quotation; 
editor.editable().on('keydown', function(evt){ 
    console.log('keydown', evt); 
    // You could call editor.getData() to get current editor 
    // contents and then count anything you like. 
}); 

但不是在寻找像​​你应该更像change想了解更多的“输入不可知”事件事件(因为变化可能是由不同的源引起的,如pastecut,拖放)。

然后,如果您正在寻找CKE的字数统计功能,那么为什么还要创建自己的插件?你可以简单地使用像wordcount插件。

+0

我在这里失去了一些重要的东西。我没有处理插件的经验,所以我不知道如何实例化它们。我从textarea更改为段落,使其contenteditable =“true”并进行测试以确保它发送数据。但是当我粘贴你提供的代码时,它给了我一个错误: “TypeError:undefined不是一个对象(评估'editor.editable()。')” 这是实例吗?当你编写可编辑时,你的意思是我应该使用提供该功能的jQuery插件,或者我应该用其他东西替换editable()? –

+2

首先,你不需要用'contenteditable'把textarea改成'p'。那么,是的,这里有几个假设。在调用'CKEDITOR.replace'或'CKEDITOR.inline'方法之后,您需要使用此代码(以便编辑器已经实例化)。而且您需要知道您的实例的名称,它是在为编辑器创建的元素的id之后获取的。这里我假设了“引用”,但是如果您更改了元素,那么实例名称是不同的。你可以通过检查'CKEDITOR.instances'对象列出所有的实例。 –

+0

谢谢,它有帮助。我必须这样写:editor.on('change',function()...然后在函数下,var chars = editor.getData(); - 然后你在字符上做一个长度。确定你提到的getData是什么, –