我正在使用CKEditor和jQuery,每当用户更改字段的值时,我都想将标志切换为true。其中一个字段是CKEditor实例。
所有具有“wysiwyg”类的textareas都会转换为CKEditors但不知何故{@ 1}}事件永远不会被检测到。我做了一些谷歌搜索,但关键字组合似乎只带来无关的结果(我的谷歌很糟糕)。
感谢您的帮助:)
编辑:
$('.wysiwyg').change()
我尝试了上面的代码但它不起作用。它没有给我一个错误意味着它找到了CKEditor对象,但由于某种原因,监听器没有附加到它?
此外,如果我只用for (var i in CKEDITOR.instances) {
CKEDITOR.instances[i].on('click', function() {alert('test 1 2 3')});
}
替换事件附件,它会提醒我的textarea的名称,所以我知道我不是试图将click事件附加到任何地方:)
答案 0 :(得分:53)
你可以在这篇文章中获得一个插件(以及关于哪些内容被检测为更改的解释):http://alfonsoml.blogspot.com/2011/03/onchange-event-for-ckeditor.html所以你可以做一些事情,比如
for (var i in CKEDITOR.instances) {
CKEDITOR.instances[i].on('change', function() {alert('test 1 2 3')});
}
答案 1 :(得分:14)
我没有设法改变工作但是onblur似乎工作可能足以满足您的需求
CKEDITOR.instances['name'].on('blur', function() {alert(1);});
答案 2 :(得分:13)
现在有一个更改事件:http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change
以下版本适用于我使用版本4.4.3。您需要处理Source和HTML更改的时间。
// Initialize the rich text editor.
var bodyEditor = CKEDITOR.replace('emailTemplate_Body',
{
readOnly: false
});
// Handle when the Source changes.
bodyEditor.on('mode', function () {
if (this.mode == 'source') {
var editable = bodyEditor.editable();
editable.attachListener(editable, 'input', function () {
alert('source changed');
});
}
});
// Handle when the HTML changes.
bodyEditor.on('change', function () {
alert('change fired');
});
答案 3 :(得分:11)
我明白了!
首先,我在我的网站上编辑了ckeditor类的textareas,我让ckeditor.js将它们作为richTextEditors。然后我尝试了其他答案的不同解决方案,但无法使它们起作用 然后我更改了类名(到CKeditor),所以我必须在我的代码中初始化编辑器。我试过这个并且它有效:
<script type="text/javascript" src="/ckeditor/ckeditor.js"></script>
<script type="text/javascript" src="/ckeditor/adapters/jquery.js"></script>
$('.CKeditor').ckeditor(function(){
this.on('blur', function({if(this.checkDirty())alert('text changed!');});
});
因此,当编辑器失去焦点时,它会检查它是否脏,如果是,那么它会触发更改的函数(本例中的警报)。
后来我再次尝试使用onchanges插件,以这种方式:
$('.CKeditor').ckeditor();
for (var i in CKEDITOR.instances) {
CKEDITOR.instances[i].on('change', function() {alert('text changed!');});
}
现在它也适用于插件(感谢@Alfonso)。但我认为该插件会使更改事件过多,我更喜欢第一种解决方案,其中更改仅针对模糊进行评估。
希望这有帮助!并感谢所有人的帮助。
答案 4 :(得分:8)
CKEditor的功能为'checkDirty()'
。检查CKEditor值是否已更改的最简单方法是在代码中添加这段JS。
CKEDITOR.instances['emailBody'].on('blur', function(e) {
if (e.editor.checkDirty()) {
var emailValChanged=true; // The action that you would like to call onChange
}
});
注意:emailBody
- 是您的textarea字段的ID
答案 5 :(得分:7)
我能做的最好,基本上可以指示编辑器的内容是否已从原始状态更改。
var editor = $('#ckeditor').ckeditorGet();
editor.on("instanceReady", function(){
this.document.on("keyup", function(){
console.log(editor.checkDirty());
});
});
答案 6 :(得分:3)
我没有提出解决方案,但以下链接更多地讨论了CKEditor可用的事件:
http://alfonsoml.blogspot.com/2009/09/ckeditor-events.html
这不是我想要的完美解决方案,但我使用以下内容标记我的内容已被修改:
CKEDITOR.on('currentInstance', function(){modified = true;});
这实际上并不意味着内容已被修改,但用户已经从编辑器中聚焦或模糊(这比没有好)。
答案 7 :(得分:2)
editor = CKEDITOR.appendTo('container', {resize_enabled: false});
editor.on('key', function () { setTimeout(setHtmlData,10); });
等
答案 8 :(得分:2)
对于事件更改,请在更新http://ckeditor.com/addon/onchange上下载插件并执行此操作
var options_cke ={ toolbar : [ { name: 'basicstyles', items :['Bold','Italic','Underline','Image', 'TextColor'] }, { name: 'paragraph', items : [ 'JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','BGColor' ] }, { name: 'font', items : [ 'Font','Styles']} ], on : { change :function( ev ) { //ev.editor.focus(); console.log(ev); } } }; var editor=$('yourCkeEditorID').ckeditor(options_cke);
答案 9 :(得分:1)
从我在CKEditor文档站点上看到的CKEditor附带内置事件处理。这意味着您应该使用它而不是JQuery来监听onChange事件。这也主要是因为当像CKEditors这样的编辑创建他们的“幻想”时,你最终会听到错误的元素进行更改。我相信如果你能得到CKEditor javascript对象的引用,你应该可以这样写:
ckRefObj.on('onChange', function() { /* do your stuff here */ });
我希望这会有所帮助。
答案 10 :(得分:0)
此代码会在用户点击任何侧边栏链接时提醒用户
$("#side-menu a").click(function(e){
if(checkUnsaved()){
if (confirm("You have unsaved changes.Do you want to save?")) {
e.preventDefault();
}
// or ur custom alert
}
});
function checkUnsaved() {
if(CKEDITOR)
return CKEDITOR.instances['edit-body'].checkDirty(); // edit-body is the name of textarea in my case.
else
return false;
}
答案 11 :(得分:0)
我显然不能简单地添加评论,因为我是网站的新手,但Garry的答案是正确的,我已经独立验证了所以我想添加它。
CKEDITOR.instances [xxx] .on('change',function(){alert('value changed !!')});
这适用于CKEditor 4+,并捕获所有更改事件,包括撤消和重做,渲染Alfonso的js对新用户来说是不必要的。
答案 12 :(得分:0)
$(document).ready(function () {
CKEDITOR.on('instanceReady', function (evt) {
evt.editor.on('blur', function () {
compare_ckeditor('txtLongDesc');
});
});
});
当我使用CKeditor版本3.6时,不知道'变更'事件,但'模糊'事件对我来说非常适合
答案 13 :(得分:-1)
对于以后的Google员工,我注意到如果您使用此
创建CKEditor$("#mytextarea").ckeditor();
它有效但在表单提交时不会更新mytextarea
值,因此它会发送旧值
但
如果你喜欢这个
CKEDITOR.replace('mytextarea');
在表单上提交它发送新值