我正在尝试使用jquery检测CKEditor中是否有某些内容发生了变化,但无法使其正常工作。
var isModified = false;
$('textarea,input').change(function(){
if(!isModified){
isModified = true;
}
});
$(".ckeditor").document.on('keydown', function() { isModified = true; });
window.onbeforeunload = function(){
$(".ckeditor").ckeditorGet().updateElement();
if(isModified){
return "Are you sure you want to leave page?";
}
};
有谁知道为了使它适用于CKEditor 3.6.2需要什么?它适用于所有其他表单元素。
答案 0 :(得分:29)
这有a function called checkDirty() in the CKE api。这样你就不需要自己动手了。还附带其他有用的功能,如resetDirty()。试试这个作为测试:
if ( CKEDITOR.instances.editor1.checkDirty() ) alert("Content changed");
更新5.7.2013
请参阅http://dev.ckeditor.com/ticket/9794 - 更改事件已确认为新功能!它也被标记为Milestone 4.2,并通过CKSource的推文确认!只是不相信里程碑的截止日期,它们往往会改变。
更新1.8.2013
CKEditor 4.2已经出局,它将onChange事件作为一项功能引入。显然,根据文档,每次可能的变化都不是100%可靠 - 希望它足够好用!在http://ckeditor.com/release/CKEditor-4.2
发布信息答案 1 :(得分:3)
您可以通过绑定编辑器的键事件来跟踪编辑器中的更改。
使用jQuery适配器:
$('.ckeditor').ckeditorGet().on('key', function(e) {
var keyCode = e.data.keyCode; // if you need to track the key
isModified = true;
});
key活动
上的文档答案 2 :(得分:1)
您可以使用此CKEditor plugin在内容发生变化时触发事件。
答案 3 :(得分:0)
使用我的本地Drupal安装进行检查,CKEditor不是常规HTML表单元素(它不是textarea)。相反,它是一个模仿表单元素的IFrame。我想你可能需要创建一个小的CKEditor插件,并使用它来与你的本地脚本进行通信,参见:add code for event listener for keypress in ckeditor。